*** Clicca sul gioco per dargli il fuoco (altrimenti i tasti non funzioneranno), quindi premi F per mandare a tutto schermo e P per iniziare la partita. ***

*** Clicca su "Click here to load external level" per caricare un livello custom (grazie a Vincenzo Striano per l'idea!). ***

EDIT: --- Ho aggiunto 2 piccoli bonus:

  1. Se durante la partita premete il tasto 1, la modalità di gioco cambia da intero livello a camera;
  2. Se durante la partita premete il tasto 2 viene commutato il font grafico. ---

In questo periodo di quarantena da COVID-19, visto che in tanti regalano cose qua e là, ho pensato di preparare un regalo anche io.

Si tratta di due librerie scritte in Construct 3 e di un giochino che mostra come funzionano.

Procediamo con ordine e partiamo dalla fine, ovvero dal giochino (nasce come esempio, pertanto è volutamente limitato).

Il giochino è un clone testuale dello storico Boulder Dash (

). Per chi ha un paio d'anni in più, come me, forse lo ha giocato anche con il piratato nome di "Caduta massi" su C64 (

).

Lo scopo del gioco è quello di far fuggire il personaggio dal livello, attraverso un portale che si apre solo dopo che lo stesso ha raccolto tutti i diamanti presenti.

I comandi sono tutti presenti a video, ma li ricapitolo brevemente:

  • WASD o i tasti direzionali consentono di muovere il giocatore
  • Shift + A oppure Shift + sinistra consentono di spingere una roccia verso sinistra (se possibile)
  • Shift + D oppure Shift + destra consentono di spingere una roccia verso destra (se possibile)
  • F mette il gioco in fullscreen
  • K uccide il giocatore (gli fa perdere una vita, da usare se ci si è "incastrati" senza via d'uscita)
  • P dalla schermata del titolo avvia una nuova partita
  • R dalla schermata del gameover torna alla schermata di avvio
  • Click su "Click here to load external level" per caricare un livello custom
  • 1 commuta da livello intero a camera
  • 2 commuta il set caratteri

Quelle che seguono sono le leggi che governano il mondo di gioco:

  1. il giocatore deve raccogliere tutti i diamanti (i quadratini azzurro chiaro). Quando li ha raccolti tutti si apre il portale. Il giocatore passa al livello successivo (nel mio caso vince) entrando nel portale. Ha a disposizione 3 vite e per ogni vita 200 secondi per farlo.
  2. il giocatore può muoversi in tutte le direzioni scavando nel terreno. Non può oltrepassare i muri e le rocce (@).
  3. scavando, può scavare sotto le rocce... se si sofferma immediatamente sotto una roccia (anche se sopra ce ne sono altre) le sostiene, ma se gli precipita una roccia addosso ne rimane schiacciato.
  4. le rocce sdrucciolano le une sulle altre, lo stesso i diamanti, e possono anche sdrucciolare rocce sui diamanti e viceversa (in pratica, se rocce e diamanti non hanno un appoggio solido ed hanno spazio ai lati, possono cadere).
  5. il giocatore può spostare le rocce, solo a sinistra e a destra, a patto che si trovi adiacente alla roccia da muovere e che nella direzione desiderata vi sia uno spazio vuoto dopo la roccia.
  6. nel campo di gioco ci sono anche dei nemici che se toccano il giocatore gli fanno perdere una vita.
  7. i nemici sono anche molto utili: il giocatore può ucciderli facendogli cadere addosso le rocce. I nemici morendo esplodono, e l'esplosione è in grado di distruggere rocce e muri (ma non diamanti).

Sulla base di queste regole potete giocare questo simpatico puzzle-game, ma non solo: potete anche creare dei vostri livelli e pubblicarli da qualche parte (se volete li mandate a me ed io ve li aggiungo qui nella pagina itch) o inviarli ai vostri amici (grazie a Vincenzo Striano per l'idea!). Infatti, il livello è "disegnato" in un semplice file di testo (potete guardare CustomLevel.txt per vedere come è fatto). Per caricarlo nel gioco è sufficiente cliccare con il mouse sulla scritta "Click here to load external level" (per ragioni tecniche legate ai vari browser è necessario usare il mouse), quindi selezionare il file del livello che si intende giocare.

Se volete costruire i vostri livelli, queste sono le indicazioni:

  1. tutto il livello deve essere disegnato in 25 righe di testo ed ogni riga deve contenere esattamente 80 caratteri (vedi il file CustomLevel.txt)
  2. occorre rispettare lo spazio previsto per l'HUD (vedi sempre il file CustomLevel.txt)
  3. ogni livello deve contenere almeno il giocatore (A) e l'uscita (Q)
  4. i caratteri utilizzabili (ed il loro significato) sono i seguenti:
  • X (maiuscola) : muro infrangibile (le esplosioni non lo distruggono)
  • M (maiuscola) : muro frangibile (può essere distrutto da una esplosione)
  • O (maiuscola) : roccia
  • . (punto) : terreno
  • <spazio vuoto> : spazio vuoto (senza terreno né altri oggetti, rocce e diamanti possono caderci dentro e i nemici possono muovercisi)
  • d (minuscola) : diamante
  • E (maiuscola) : nemico che inizia il suo movimento verso sinistra
  • e (minuscola) : nemico che inizia il suo movimento verso destra
  • A (maiuscola) : posizione di partenza del giocatore
  • Q (maiuscola) : posizione del portale di uscita

Ho preparato due video che mostrano come risolvere (una delle possibili soluzioni) il gioco ufficiale ( *** ATTENZIONE SPOILER!! ***

) e il livello custom ( *** ATTENZIONE SPOILER!! ***

), ma vi consiglio provare a risolverli da soli per non perdere il gusto della sfida (non sono eccessivamente complicati... poi quello custom l'ho derivato da quello ufficiale, in modo da potervi permettere di riciclare alcune delle tecniche già apprese, ma ovviamente i livelli custom possono avere qualsiasi aspetto e difficoltà).


Quindi, augurandovi buon divertimento con questo classico senza tempo, passo al prossimo argomento.


La prima delle librerie presenti nel progetto si trova nell'eventsheet libCRT.

Si tratta di un vero e proprio emulatore della "Text mode" del PC, eventi Construct che ricostruiscono le routine del servizio 10h del BIOS (eccetto la riscrittura della matrice del video font e della reimpostazione dei 16 colori standard via RGB, limitazioni che sono aggirabili entrambi caricando a runtime una differente tileset in screen opportunamente modificata), le routine della libreria CRT di Turbo Pascal e quelle relative alla gestione video di GWBasic (tutte cose ormai sconosciute ai più).

Tengo a precisare che il giochino non usa sprite o plugin esterni, ma esclusivamente l'emulatore da me realizzato.

Perché perdere tempo a fare una cosa del genere? Le motivazioni, fondamentalmente, sono le seguenti:

  1. Sono un inguaribile nostalgico... quando ho iniziato io a programmare sul PC (ed ho iniziato ben prima del PC), la modalità grafica, semplicemente, non esisteva... ed anche le interfacce a caratteri erano piuttosto limitate... ma quei tempi e quel modo di programmare è scomparso, ed è un gran peccato, perché il software, come tutto, ancora si basava sull'essere e non sull'apparire...
  2. Ho voluto ancora una volta dimostrare quanto potente sia uno strumento ad eventi come Construct e quanto si sbaglino le persone ancora ad asserire che lavorare in Construct non è programmare...
  3. La modalità testo è un fantastico strumento didattico... aiuta a focalizzare l'attenzione sulla logica e costringe a "pensare" per escogitare strategie per risolvere problemi di UI e UX invece di ricorrere alle solite scorciatoie fornite dalle modalità grafiche.
  4. Il modo testo è un fantastico strumento per dimostrare che è possibile fare videogiochi con qualsiasi cosa, e che un videogioco, per intrattenere, non deve necessariamente avere milioni di colori e grafiche da film... quelle servono solo per avere successo facilmente e rapidamente, spesso con titoli che mancano totalmente di sostanza. Basti pensare a Rogue (

) un gioco fatto in modo testo, senza l'ausilio dell'ASCII esteso, in bianco e nero, che ha dato il via ad una intera categoria di videogiochi (i Roguelike).

La seconda libreria, nell'eventsheet libANSI, come dice il nome (a conoscerlo), implementa lo stack del terminale ANSI, limitatamente all'aspetto video.

Prima di internet, per scambiare dati tra computer usavamo le BBS... una sorta di "portali" nati inizialmente per scambiare messaggi, poi estesa ai file, poi sono apparsi i primi giochini online... e in tutto questo, è nato (tra i tanti, come sempre) uno standard per i terminali, che consentisse di trasmettere, in maniera controllata, colori e animazioni. Era l'epoca dei terminali ANSI e del suo standard. E le BBS divennero il luogo in cui gli artisti digitali poterono pubblicare i loro primi "murales".

Ancora oggi, sebbene ovviamente oramai quasi estinti, questi artisti hanno una loro nicchia e continuano a produrre (es. https://16colo.rs/)

Ecco uno dei tanti video di esempio: 

Un bellissimo mondo fatto di 16 colori fissi, con forme costrette, che gli artisti più bravi riescono a moltiplicare con gli appositi caratteri "retini" e gli 8 prestabiliti colori di sfondo disponibili.

Realizzo questa libreria augurandomi che a qualche pixel artist possa la cosa interessare, o addirittura stuzzicare!


Il modo testo, o interfaccia a caratteri, oramai è passata di moda, anacronistica (anche se definire anacronistico qualcosa che ha meno della mia età mi fa impressione), ma suscita ancora grandi emozioni ed è fonte di grande ispirazione. Basti pensare al progetto ASCIIDENT, che ovviamente non è in modo testo, ma affonda a piene mani nelle sue radici. Un progetto che consiglio a chiunque di darci un occhio:


Basta, ho scritto fin troppo... questo è il mio dono, a qualcuno sembrerà inutile, qualcun altro lo troverà prezioso sotto diversi punti di vista... a tutti loro dico buono studio e buon divertimento!


13/04/2020 - Aggiornamento:

Ho aggiunto nei download immagini contenenti l'intero codice degli eventsheet, in modo che anche chi non è in possesso della versione 3 di construct può studiarselo.

StatusReleased
PlatformsHTML5
Rating
Rated 5.0 out of 5 stars
(5 total ratings)
Authorfiaful
GenrePuzzle
Made withConstruct
Tagsansi, ascii, boulder, construct-3, crt, dash, Text based, text-mode

Download

Download NowName your own price

Click download now to get access to the following files:

CustomLevel.txt 1.9 kB
TexterDash.c3p 1.9 MB
libANSI full eventsheet.png 917 kB
libCRT full eventsheet.png 2.6 MB
TexterDash full game eventsheet.png 3.5 MB

Comments

Log in with itch.io to leave a comment.

(+1)

This is incredible. You created a CRT and ANSI parser in event sheet construct style. I am speechless. WELL DONE

ha ha thanks! yes, it was a fun programming exercise ... Many (at least here in Italy, I don't know it's the same in the rest of the world) believe that if you don't write code, you don't program ... well, the reality is very different. Everything is programming. Programming is something more intimate, and at the same time transcendental ... however I am very happy with your appreciation! have fun with this!

Amazing, I thought they were sprites or tilemap, but you create a whole emulator. Great!

(+1)

ha ha ... yes! and all in pure construct! I don't like easy things! ha ha
Many thanks for your appreciation!

Dope project! Thanks so much for sharing!

thank you for appreciating it!