Technology Experience
VivendoByte.ByteAdventure

Marine Vs. Cacodemone

Venerdì 10 Dicembre 1993 fu un giorno storico. I ragazzi della ID Software pubblicarono su un server  dell’Università del Wisconsin (USA) la versione shareware di Doom, il più grande successo di tutti i tempi  ed il capostipite di un nuovo genere, quello degli sparatutto in soggettiva, sul quale si basarono molti  videogame degli anni successivi. Il concept era semplice: un marine in una base spaziale su Marte invasa  da mostri e demoni usciti direttamente dall’inferno doveva cavarsela facendo affidamento esclusivamente  sul proprio arsenale. Decine e decine di livelli originali. Migliaia e migliaia di livelli distribuiti  grazie ad Internet.
Questo breve racconto è dedicato a quel gioco.

Il byte array del cacodemone era stato istanziato nel momento in cui il file E2M8 (episode 2, mission 8)  era stato caricato in memoria. I bytes avrebbero permesso alla creatura infernale di assolvere al proprio  dovere senza dubbi e senza rimpianti: distruggere l’umano che si aggirava nella base. Il byte[0] di  quell’array sapeva benissimo quello che avrebbe significato per lui: la deallocazione dalla memoria.  Portare a 0x00 il contenuto della cella di memoria che conteneva i punti-ferita (PF) dell’umano avrebbe  comportato la conclusione della partita e la conseguente pulizia della memoria relativa. Se ci fosse stato  un modo, l’avrebbe evitato, ma non era possibile. Al momento giusto, il cacodemone avrebbero attaccato e  dell’umano non sarebbe rimasta traccia. Ma non ancora.

L’engine chiamava continuamente il metodo Walk() sull’istanza di classe Marine. Ciò consentiva all’oggetto  di mantenersi costantemente in movimento, per non diventare un bersaglio facile. Teneva ben puntata  davanti a sè la doppietta che aveva recuperato qualche stanza prima. Si trovava a ridosso dei collettori  di energia. Se il software l’avesse previsto, si sarebbe sentita puzza di bruciato ovunque – evidentemente  i cavi elettrici fusi dall’estremo calore non avevano resistito. Le textures delle pareti metalliche  riportavano chiazze di sangue, segno della battaglia che gli occupanti della base avevano tentato di  lottare inutilmente. Il marine era rimasto solo nella base e doveva riuscire a trovare una via di uscita  in mezzo a quella follia. Follia fatta da demoni, passaggi segreti, ascensori e…morte.

L’algoritmo impediva al cacodemone di muoversi. Per ottimizzare la velocità e l’occupazione di memoria, le  istanze dei mostri erano state programmate per agire solo quando il loro obiettivo – il marine – si fosse  sufficientemente avvicinato a loro. Il cacodemone era l’ultimo avversario prima della porta di sicurezza  che conduceva al livello successivo: era questione di qualche ciclo di clock – prima o poi, il marine  sarebbe passato di lì. E allora sì che se ne sarebbero viste delle belle. La IA della creatura in quel  momento era bloccata in un ciclo do…while: il demone non stava facendo nulla, non pensava, non  respirava, non faceva niente di niente. Solo l’engine poteva sbloccare la situazione.

Il marine girò l’angolo e chiamò il metodo Fire() senza esitare, uccidendo sull’istante un imp giusto un  attimo prima che questi lanciasse la sua palla di fuoco. Lo sparo della doppietta fu così violento che il  demone di basso livello volò indietro di qualche metro, prima che il garbage collector decidesse di  rimuoverlo dall’ambiente, simulando un dissolvimento della creatura nell’aria fredda e puzzolente della  base militare. Il marine si mosse subito a destra, riparandosi dietro una colonna. Sentì lì vicino il  respiro di un altro imp che vagava nella base – e lui rimase immobile e silenzioso per non farsi scoprire.  Quando l’imp gli passò accanto non potè non vederlo. Il marine lo sentì come soffiare dalla sua bocca ed  alzò il braccio peloso per lanciare il fuoco infernale dalla mano. L’algoritmo produsse un colpo  impreciso, perchè la palla di fuoco colpì la colonna dietro la quale si nascondeva il marine. L’esplosione  ferì l’umano in modo superficiale. Prima che le cose degenerassero, il marine sbucò fuori dal suo  nascondiglio ed esplose un altro colpo che fece secco l’imp allo stesso modo del primo.

Se il marine fosse stato un marine vero, avrebbe tirato un respiro di sollievo. Ma era un marine virtuale,  simulato all’interno di un software. Ciò nonostante, non gli sarebbe piaciuto morire – a nessuno piace  morire. Il marine sapeva perfettamente che sotto sotto era solo un mucchio di bytes istanziati chissà  dove. Sapeva perfettamente che tecnicamente parlando non sarebbe mai davvero morto. Sapeva perfettamente  che la sua vita dipendeva al 100% dal sistema all’interno del quale stava girando: algoritmi, calcoli,  niente di più. Il suo mondo era solo un mucchio di textures. Lui stesso era un’istanza di classe. E  allora? E allora non gli sarebbe piaciuto morire, indipendentemente da tutto. Il marine pensò che finchè  avrebbe avuto un colpo in canna, avrebbe lottato per rimanere lì doveva. Diede un’occhiata intorno:  davanti a lui si apriva un lungo corridoio, senza aperture laterali. In fondo al corridoio c’era una  porta. Nno vedeva pericoli, perciò raggiunse la porta velocemente.

Mentre il marine camminava verso la porta, il cacodemone si attivò, emanando un suono gutturale. Cominciò  a muoversi lentamente verso la porta per tendere un agguato al marine. La struttura 3D nella quale si  trovava il demone costruiva una stanza quadrata, le cui textures riportavano anche 4 umani crocifissi:  quando il marine sarebbe entrato, gli sarebbero venuti i brividi vedendo 4 suoi compagni ridotti in quello  stato. O perlomeno…sarebbero venuti i brividi all’Umano che stava al di là del monitor.

Il marine utilizzò il pass rosso per aprire la porta. L’engine fece alzare lentamente la porta attraverso  un semplice shifting dei bytes della texture. L’urlo del cacodemone fu così forte ed imprevisto che  investì il marine in tutta la sua essenza. Spaventato, il marine chiuse gli occhi…e quel gesto gli fu  fatale. Il cacodemone era a meno di un metro dal soldato. Emise una scarica elettrica ad alto voltaggio  che penetrò nelle ossa e fece diminuire velocemente i punti-ferita del marine. L’uomo si rese conto si  essere perduto – se il giocatore non si fosse dato una mossa, sarebbe stato deallocato. “Fa qualcosa!” –  pensò il marine, sapendo benissimo che il suo messaggio non sarebbe mai arrivato all’Aldilà.

Fu così che morì. Ox245A4 cicli di clock più tardi, il byte che conteneva i punti-ferita del marine  conteneva 0. Lo stream di byte arrivò alla scheda audio, facendo urlare di dolore l’uomo. Lo schermo  divenne rosso sangue. Ed il gioco finì così.

Il giocatore premette Invio sulla tastiera, e dopo qualche attimo di caricamento un nuovo marine era  pronto per combattere contro un nuovo cacodemone in una nuova base spaziale su Marte.

Send to Kindle

Igor Damiani

La sua passione per l'informatica nasce nella prima metà degli anni '80, quando suo padre acquistò un Texas Instruments TI-99. Da allora ha continuato a seguire l'evoluzione sia hardware che software avvenuta nel corso degli anni. E' un utente, un videogiocatore ed uno sviluppatore software a tempo pieno. Igor ha lavorato e lavora anche oggi con le più moderne tecnologie Microsoft per lo sviluppo di applicazioni: .NET Framework, XAML, Universal Windows Platform, su diverse piattaforme, tra cui spiccano Windows 10 piattaforme mobile. Numerose sono le app che Igor ha creato e pubblicato sul marketplace sotto il nome VivendoByte, suo personale marchio di fabbrica. Adora mantenere i contatti attraverso Twitter e soprattutto attraverso gli eventi delle community .NET.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.