#FrameNX

Stamattina ho fatto l’aggiornamento che dovevo da 10 giorni a #FrameNX, per sistemare dei bug e approfittare per aggiungere il toggling delle opzioni tramite mouse oltre che la tastiera (principalmente per poterle azionare da Moonlight senza casini)… però ho realizzato che la versione precedente l’ho rilasciata ben 3 settimane fa. Quando sono passati tutti questi giorni, esattamente?! Da lì, sono usciti altri pensieri, perché la voce non vuole mai riposare.

È strambo perché, a pensarci così, allo stesso tempo pare sia che il #tempo sia passato troppo velocemente, ma poi anche molto lentamente guardando gli stessi punti in modo diverso. E a scrivere ora questo… ho una vaga idea di aver già fatto il discorso, ma non lo trovo; probabilmente non lo avrò mai effettivamente scritto prima, ma solo pensato (eccetto per gennaio, che lo dissi). E, qualunque sia il punto di vista più corretto, comunque non so se considerare il fatto buono o cattivo…

Da un lato mi pare di aver fatto un botto di cose: alcune testimoniate da grafichelle di programming e posting, e altre non quantificabili perché scollegate dal digitale. Se riguardo a tutti i progetti e pensieri anche solo degli ultimi 7 mesi, è tanta roba. Però, proprio nello stesso momento, sento di non aver concluso esattamente quanto vorrei (per via anche di tante circostanze), e un po’ sento il tempo che mi scivola tra le dita, riducendosi sempre di più, anche più in generale… (Btw, i buchi nel GitHub mi mettono delusione, ma quelli nel postaggio sotto mi mettono ansia…)

https://octospacc.altervista.org/2024/06/01/il-tempo-e-temporizzato/

#FrameNX #tempo

fine nxfinestra

Questa voce fa parte 6 di 7 nella serie Troppo Cloud Gaming

Well. Come dissi già, l’altro giorno non ho potuto #giocare appieno finora, in quanto un difetto del mio #programma mi aveva privata dell’asso di sfazione. Dopo non aver avuto modo, sia in termini di tempo che di forza, ieri fino a sera ho effettivamente fatto le #modifiche che dovevo (e pure qualcuna in più imprevista, #feature a sorpresa wow), altrimenti veramente esplodevo ora, perché sembrava quasi l’universo volesse impedirmi di continuare a programmare in questo caso. E intanto, la scheda di acquisizione è già in viaggio. 🫖

Comunque turns out che gestire gli stick analogici è più complicato di quello che speravo. Se è uscita la nuova release di #FrameNX significa che ce l’ho comunque fatta, però ecco, non mi sarei lamentata se fosse stato tutto davvero funzionante da subito. I #problemi erano molteplici, in primis il fatto che avevo bisogno, al contrario di come credevo, di inviare dei comandi di setup al demone sys-botbase per diminuire dei tempi di sleep, roba vabbè che poco vi interessa quindi zzz. Altra cosa che ho fatto è stata implementare configurazioni di precisione e deadzone per ciascuno degli stick; in generale può essere utile per stick difettosi, ma in casi specifici la prima si può usare per castrare gli input analogici ad un raggio di valori binario o poco maggiore, e la seconda… pensavo fosse inutile per comandare #Switch ma, in realtà alcuni stick in giro (come il sinistro del #3DS) non sembrano riportare mai una posizione a (0,0) precisa quando rilasciati, e nonostante nei giochi #Nintendo questo sembra irrilevante, in altri come #Minecraft per Switch si osserva drift. 🚓

https://youtu.be/-2V0bKG0zzo

E dopo che anche questo #progetto è arrivato ad uno stato più che maturo, è il momento di fare altro. E l’idea mi è venuta proprio lavorando a questo, perché ho usato JSON per il file di #configurazione e mamma mia è sconveniente proprio tanto quanto me lo ricordavo, ma allo stesso tempo gli altri linguaggi di dati in giro non è che siano meglio, anzi… Dunque, sfrutterò la mia magia intrinseca e le infinite potenzialità del computer per creare un formato che è come comando io!!! 💖

#3DS #configurazione #feature #FrameNX #gaming #giocare #homebrew #Minecraft #modifiche #Moonlight #Nintendo #NintendoSwitch #problemi #progetto #programma #switch #tweaks

Questa voce fa parte 5 di 5 nella serie Troppo Cloud Gaming

Torniamo a parlare del cloud gaming appezzottato, perché la mia soluzione richiede evidentemente ancora perfezionamenti. L’importante è avere #pazienza e sperimentare il necessario man mano, e forse dopo abbastanza settimane avrò effettivamente il perfettissimo setup… ormai sono fin troppo dentro questa questione per tirarmi indietro. 😱

La prima cosa è che devo al più presto ottenere la scheda di cattura ultra-cheap, perché SysDVR è un problema per l’esperienza utente. (Devo ancora ordinarla in realtà, stavo nel frattempo però cercando altra roba che mi serve su AliExpress, così da fare un solo ordine e ridurre l’inquinamento.) A parte il fatto che (come ho già detto) i menu di sistema non sono specchiati, e quindi in certi casi devo guardare la webcam, i #difetti sono vari: dovendo fisicamente collegare la console al PC anziché alla dock, può capitarmi di sbagliare qualcosa, soprattutto stando di fretta come stamattina. Anche perché, collegando direttamente al PC, la batteria si appiattisce troppo velocemente, quindi devo aggiungere il cavo Y, e quindi complessità (che comunque non è abbastanza per permettere la ricarica, ma solo una scarica più lenta, lol). 🗑️

Stamattina, tra il dover ricaricare il telefono, l’evitare di perdere il bus, e finire di vestirmi, ho mischiato i collegamenti tra Switch e PC, cavo Y e cavo USB-C, e l’ho realizzato solo fuori casa, quindi riuscivo a collegarmi solo tramite rete… ci ho anche provato, ma evidentemente le prestazioni sono totalmente inadeguate per giocare. La cosa più logica da fare è stata messaggiare mio padre a casa e chiedergli il piacere di risistemare i cavi nel modo giusto e, dopo un po’ di confusione perché gli avevo dato indicazioni parzialmente errate sullo stato presente dei collegamenti, ha sistemato tutto e la console è apparsa sul PC. Eccetto che ha anche panicato nel frattempo, e quindi ho dovuto chiedere a mio padre di premere i tasti del volume per riavviarla. E poi, visto che sulla schermata di blocco lo schermo non rimane acceso sempre, non ho fatto in tempo a premere tasti per sbloccare e ho dovuto chiedere anche questo a mio padre. 🪃

Nel frattempo, i #problemi ci sono anche per quanto riguarda gli input del gamepad, ovviamente… Ieri ho scoperto mio malgrado (perché pensavo di provare ancora a giocare fuori casa, ma ecco che non ho potuto) che sys-botbase in certi casi (chissà quali!) può buggarsi e non interpretare più i comandi che riceve, costringendo ad un riavvio del sistema. La soluzione sarebbe magari riavviare ogni volta prima di uscire di casa, così da stare senza pensieri. Intanto però scopro anche di dover migliorare la gestione degli input sul mio programma, aggiungendo quantomeno una deadzone per gli analogici, altrimenti spesso può succedere che gli input driftino una volta rilasciati, e capite che questo è un bel problema. (Chiaramente, i giochi che usano solo i tasti sono già perfettamente operabili, ma quelli e solo quelli lo sono anche su NXController, dove invece gli stick finiscono per essere interpretati digitalmente e quindi fanno movimenti estremi.) 🧼

Segnalo comunque che ho scoperto di usb-botbase, che fa la stessa cosa della versione sys ma appunto via USB, e quindi dovrebbe sicuramente essere più stabile (e forse riesce a risvegliare la console dalla modalità riposo, ma non so). Se non programmassi di passare a scheda di cattura, e quindi continuassi a tenere collegata la Swiss al PC, lo implementerei subito su #FrameNX. Si vede che continuerò ad usare il WiFi per inviare gli input allora, con le giuste accortezze… e se proprio proprio tutto va male (ma è difficile dai), allora comprerò un Arduino e implementerò il protocollo per usare quello come controller simulato via hardware, e ciò sarebbe effettivamente infallibile (e andrebbe anche su console non modificate, figata). ⛓️

https://octospacc.altervista.org/2024/05/06/not-even-gaming/

#difetti #FrameNX #gaming #homebrew #NintendoSwitch #pazienza #PC #problemi #switch

Questa voce fa parte 1 di 4 nella serie Troppo Cloud Gaming

Sono sicuramente un po’ paxxerella per iniziare nuovi progettini mezzi complicati ancora prima di finire i precedenti, ma che ci voglio fare? Quantomeno, a ‘sto giro ho effettivamente portato #FrameNX, il programma iniziato ieri, ad uno stato di completezza, tant’è che da ora penso non avrò alcun intoppo ad usarlo… e quindi l’ho anche rilasciato già stasera pubblicamente con tanto di README quasi logorroico (il link di stamattina era privato): https://octt.itch.io/framenx 🪟

La UI è ancora grezza, ma ho migliorato i messaggi a schermo, aggiungendo avvisi a scomparsa quando si verifica un errore o viene fatta un’azione (qualcuno l’ho dimenticato però oooops, dovrò metterlo, ma poca roba). Funziona in ogni caso solo con la tastiera, perché il mouse è dannoso e #programmare le hitbox sarebbe uno sbattimento in più per nessun buon motivo, dato che comunque questa per ora è una #applicazione solo PC. (Ormai si sta costruendo una lore dietro questa interfaccia, ops.) ☠️

In realtà sotto la scocca quella UI è comunque più complicata di quanto sembra, anche se è relativamente semplice, perché in primis già solo per le notifiche ho dovuto implementare tutto un sistema di coda… poi ho dovuto mettere il rendering video su un thread separato, perché l’accesso alla camera rallentava tutto il loop e quindi avrebbe inficiato sulla lettura degli input… ma spostarmi su un thread di sfondo ha introdotto non pochi casi limite strani che ho dovuto sistemare con ancora più codice… Comunque relativamente poco #codice, perché il #Python è simpatico e non è stato creato da gente che vuole vedere gli altri programmatori impiccarsi. 🦍

Btw, ho continuato a trovare altri problemi in #Pygame… Innanzitutto, un bug strano con lo stack dei joystick (cioè controller da gioco in generale, direi che il nome è scelto malino) che fa si che questi non mandino più eventi dopo essere stati inizializzati se non se ne tiene qualche reference nel codice (come una variabile assegnata che non muore), come se fossero levati dal garbage collector altrimenti… stranissimo. E poi, il fatto che per riprodurre il suono di dispositivi di input audio, tra metodi non wrappati e quindi richiamabili solo con la API grezza di SDL2, stack audio buggato in generale e comandi che letteralmente non sortiscono effetto, altri comandi che invece causano segfault alla chiusura del #programma… mi pare di stare programmando con una tempesta di raggi cosmici addosso. Ciò non lo gradisco. 😾

https://octospacc.altervista.org/2024/05/05/framenx/

#applicazione #codice #FrameNX #programma #programmare #Pygame #Python

Ieri ho effettivamente provato un po’ il #gaming Switch dal 3DS in portatilità, alla fine, e… che dire. 7/10. Certo, ogni tanto la connessione fa scherzetti e il gioco inizia a freezare per un po’, ma nel complesso si gioca con un lag accettabile e un video senza strani artefatti, veramente apprezzabile. Devo però capire perché in certi rari momenti il client crasha completamente invece di riuscire a ristabilire la connessione, e temo anche la batteria del 3DS si appiattisca troppo velocemente con questa #applicazione… ma vabbè, a sistema consolidato potrei anche usare il telefono. 🐚

Visto che voglio provare meglio il setup, mi sono portata avanti e ho fatto un programmino per #PC che legge direttamente gli input del gamepad virtuale e li invia alla #console; quindi, eliminando quegli altri due programmi necessari, sostituendoli con uno solo. La finestra inoltre visualizza il video da dispositivi di cattura standard, e quando lo implementerò riprodurrà anche audio, quindi sostituirà anche il riproduttore multimediale… per ora non ho ancora la scheda di cattura HDMI, quindi devo ancora usare SysDVR, ma almeno mi mostra il video della webcam (che mi serve per navigare nei menu di sistema, il DVR non lo trasmette), quindi già scendo da 4 app e finestre a solo 2. ✨️

Implementare la lettura degli input del controller, e l’invio al demone sys-botbase tramite socket TCP, è stato un po’ intricato, ma alla fine il codice è venuto pulito, i tasti rimappabili tramite file config, e sorprendentemente sembra tutto ben funzionante dal primo momento… Nel senso, i comandi sembrano rispondere bene senza particolari accorgimenti; anzi, anche meglio di NXController, perché io invio direttamente i valori degli stick analogici alla console, mentre lui deve leggere valori rimappati alla tastiera e quindi tutti digitali. In effetti non ci avevo pensato quando mi era venuta questa #idea, ma effettivamente ho migliorato la mia #UX anche in questo modo, ora ho input più precisi. 🤏️

Volevo inizialmente usare Ren’Py, ma ho subito scoperto che non include funzioni per accedere ai dispositivi video, né tantomeno ha la classe camera nella sua implementazione di #Pygame, quindi… ho usato semplicemente Pygame, e in poche righe di codice funziona già tanta roba, anche se la UI non è delle migliori. Dovrò investigare se davvero non ci sarebbe stato verso di usare l’altro engine oppure si, perché potrebbe tornare utile in futuro. Ancora versione molto WIP, diversi bug da sistemare, ma almeno l’ho già caricata qui… poi creerò anche dei pacchetti standalone (che includono già #Python e le librerie) per Windows e Linux. L’ho chiamato #FrameNX comunque, meglio evitare qualunque pretesto di violazione del trademark di #Nintendo per il nome #Switch… 🚨️

Ma, ovviamente, non era un mio #progetto secondario se non saltava fuori un #problema inaspettato mentre programmavo e testavo… il codice che controlla la versione dell’OS di pygame.camera è rotto su Windows Server, e quindi l’inizializzazione fallisce… evviva. L’ho identificato e sistemato subito, ho anche inviato la PR #4221, quindi non è stato un vero problema, però… che cazzo, non è possibile che tutto quello che finisce in mano a me si rompe… trovare bug in librerie così utilizzate e famose senza fare nulla di particolare non è roba da tutti, eppure ormai siamo ad uno a settimana, e chissà cosa mi riserva il futuro. 💣️

https://octospacc.altervista.org/2024/05/04/framionx/

#4221 #applicazione #console #FrameNX #gaming #idea #Nintendo #PC #problema #Pygame #Python #switch #UX

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst