Benvenuto Visitatore(Log In|Registrati)

 
Reply to this topicStart new topic
> Rust in the Dark, Ennesimo (e forse definitivo) rewrite dell'engine di Alone in the
Ray1184
messaggio17 Aug 2026, 19:52
Messaggio #1





Gruppo: Gamer
Messaggi: 94
Iscritto il: 31 December 13
Utente Nr.: 20.239
BGE Alone in the dark
SO Windows7




Salve a tutti!
Dopo quasi dieci anni dall'ultimo mio post e con qualche capello bianco in più torno a presentare una mia idea sul magico forum del retrogaming!
Per chi non ricordasse, 13 anni fa avevo creato questo topic https://www.oldgamesitalia.net/forum/index....showtopic=20725 per parlare di un progetto in via di sviluppo, ovvero un engine da me creato con l'obiettivo di riprodurre una grafica e gameplay simile all'ormai vecchietto ma sempre amato Alone in the dark del 1992 (e in generale la trilogia).
L'engine ha avuto alti e bassi (molti), ma senza tirarla per le lunghe è poi rimasto fermo per un sacco di tempo e aveva raggiunto complessità elevatissime dovute specialmente a mie mancanze tecniche, scarsa documentazione degli engine/api utilizzate e continui rework. La mia scelta poi di non voler usare engine ad alto livello ma lavorare più a basso livello ha sempre rallentato il tutto.
Negli ultimi mesi ho ripreso a smanettare un po' e sfruttando gli agenti AI ho potuto potenziare molto le mie capacità (per necessità oltre che per scelta visto che sviluppo per lavoro) e ho lavorato parecchio a un voxel engine estremamente sfidante che mi ha fatto comprendere molti meccanismi che prima non conoscevo (magari ne parlerò a parte, ma per farla breve si tratta di un engine tipo Teardown, con miliardi di voxel piccoli, in grado di girare a FPS accettabili anche su iGPU e browser).
Recentemente quindi ho deciso di sfruttare queste conoscenze e questi strumenti per riprendere in mano invece questo progetto storico. Però, come faccio spesso in questi casi, ho deciso di riniziare da zero, sfruttando ormai lo stack su cui mi sto potenziando da tempo: linguaggio di programmazione Rust e dipendenze minime (solo api grafica). Quindi non basso livello, ma bassissimo, sempre per mia scelta di tenere l'applicativo quanto pià leggero e controllabile.

Questa volta però ho deciso di non reinventare il concetto, anche perchè nel vecchio thread ricordo che mi era stato chiesto "Ma l'engine è in grado di far girare il gioco originale?".
Ai tempi quella richiesta mi sarebbe sembrata impossibile, perchè ovviamente il mio engine era simile visivamente ma tecnicamente completamente diverso dal vero AITD.
Quindi questa volta, anche per non rimanere in stallo (come successo innumerevoli volte negli scorsi tentativi) ho deciso proprio di partire da quell'idea: la prima cosa che dovrà fare il mio engine, sarà riuscire a far girare l'AITD originale. La seconda sarà moddare l'AITD. La terza, fare contenuti inediti.

Quello che ho fatto è stato partire da FITD (Free in the dark), ovvero l'engine opensource già esistente e usato nelle edizioni GOG come runtime di AITD.
Il reverse engineering di quella parte è stata estremamente complicata, anche con l'AI. Questo perchè FITD è stato ottenuto con un disassembler e il sorgente è terribile da comprendere.
Però pian piano ce l'abbiamo fatta e abbimo realizzato le prima due componenti:
1) una pipeline che converte gli assets legacy in formato moderno
2) l'engine, completamente agnostico rispetto al formato legacy

L'idea di separare risorse da engine è stata la chiave per ottenere questi risultati
1) avere un engine che non sia l'ennesimo FITD, ma un engine ben scritto, moderno, leggero e idiomatico
2) possibilità, tramite un formato di scripting moderno ECS (stesso paradigma usato da unity) di realizzare contenuti completamente inediti (ovvero l'idea iniziale)

In questo modo posso far coesistere la possibilità di eseguire i giochi originali (post conversione asset e qualche modifica agli script) e contenuti nuovi.

Allo stato attuale sono messo meglio di quanto ero mesi, se non anni dopo i primi esperimenti, e l'engine è gia in grado di caricare ed eseguire la soffitta del primo AITD, con tutta la pipeline nuova.



Carnby è completamente animato, può muoversi, correre, cercare, spingere e interagire con i vari elementi della soffitta, ovviamente in modo più fluido e immediato rispetto all'originale.

Devo dire che le sessioni di reveng sono state estremamente interessanti (anche se toste) perchè l'AITD originale aveva logiche e soprattutto ottimizzazioni per nulla banali e addirittura concetti e idee molto all'avanguardia per l'epoca in cui è uscito (finalmente ho avuto la risposta su come gestivano i layer 2.5d e in uno dei miei esperimenti non ci ero andato molto lontano)

 
utdefault
messaggio21 Aug 2026, 01:11
Messaggio #2



Gruppo icone

Gruppo: OldGamer
Messaggi: 473
Iscritto il: 28 December 13
Utente Nr.: 20.235
SO Altro




Ciao, Ray. Bentornato! Sicuramente sarai più vecchio di un decennio fa, ahahah.
In tutti i modi, grazie e complimenti per la ripresa di questo progetto.
A tue future news.

Bye.

p.s.
potresti sfruttare l'engine quando terminato per creare una tua avventura dinamica (survival) horror. Magari basata sugli eventi di questa fase novennale.
Qualcosa del genere... biggrin.gif
.
..
...

Revision 0.9

Sono trascorsi 9 anni. Un uomo torna nello studio dove aveva abbandonato un misterioso progetto.
Frugando in un cassetto del vecchio ufficio ritrova i suoi appunti archiviati. Durante la lettura scopre che il lavoro non è rimasto incompiuto.
Esaminando delle tracce di revisione intuisce che qualcosa di inspiegabile sia accaduto nei locali.
L'ultimo frammento sembra celare una memoria evocativa.

 
TheRuler
messaggio21 Aug 2026, 11:22
Messaggio #3



Gruppo icone

Gruppo: SMod
Messaggi: 14.517
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




RAYYYYY, non hai idea del piacere che ho a rileggere un tuo post!
L'IA ha fatto rinascere davvero un sacco di progetti sopiti.

CITAZIONE
"Ma l'engine è in grado di far girare il gioco originale?".

la tua faccia 13 anni fa: icon_rofl.gif
la tua faccia ora: rolleyes.gif



non puoi lasciarci con questo cliffhanger!
CITAZIONE
finalmente ho avuto la risposta su come gestivano i layer 2.5d e in uno dei miei esperimenti non ci ero andato molto lontano


--------------------
 
TheRuler
messaggio21 Aug 2026, 11:30
Messaggio #4



Gruppo icone

Gruppo: SMod
Messaggi: 14.517
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




CITAZIONE (Ray1184 @ 17 Aug 2026, 20:52) *


Carnby è completamente animato, può muoversi, correre, cercare, spingere e interagire con i vari elementi della soffitta, ovviamente in modo più fluido e immediato rispetto all'originale.

che bellezza questo screenshot.

domanda (e figurati se non c'erano): le ombre sono casted o raster pre renderizzate?
gli oggetti spostabili come il cavallo o lo sgabello non hanno ombra neanche nell'originale, non ricordo, ma immagino di no.
hai mica provisto illuminazione dinamica? rolleyes.gif


--------------------
 
Ray1184
messaggio21 Aug 2026, 19:26
Messaggio #5





Gruppo: Gamer
Messaggi: 94
Iscritto il: 31 December 13
Utente Nr.: 20.239
BGE Alone in the dark
SO Windows7




CITAZIONE (TheRuler @ 21 Aug 2026, 12:30) *
CITAZIONE (Ray1184 @ 17 Aug 2026, 20:52) *


Carnby è completamente animato, può muoversi, correre, cercare, spingere e interagire con i vari elementi della soffitta, ovviamente in modo più fluido e immediato rispetto all'originale.

che bellezza questo screenshot.

domanda (e figurati se non c'erano): le ombre sono casted o raster pre renderizzate?
gli oggetti spostabili come il cavallo o lo sgabello non hanno ombra neanche nell'originale, non ricordo, ma immagino di no.
hai mica provisto illuminazione dinamica? rolleyes.gif


Eheheh, che piacere finalmente poter rispondere a queste domande!
Ovviamente no, nessuna ombra dinamica, tutto prerenderizzato, ma sulla illuminazione dinamica devo dire che ci ho pensato e si potrebbe anche fare (su scene nuove si potrebbe esportare un depth buffer e usarlo per creare una lightmap, non sarebbe certo male come effetto!).
Ti riporto qui qualche chicca tecnica che la Infogrames si era inventata più di 30 anni fa (alcune sembrano assurde a pensarci, ma imposte da limite dell'epoca)

- Il modello 3d di carnby ha almeno 10 varianti, perchè ai tempi non esisteva il concetto di animazione skeletrica, joint e armature. C'era il modello di carnby con la lanterna, quello col fucile, quella con la spada ecc...
- A parte i modelli 3d (chiamati "actors") non c'era quasi nulla di 3d. I background erano ovviamente immagini statiche, ma la magia vera la facevano le "cover zones". In sostanza, quando un actor si trova su una determinata area (dietro un ostacolo) attiva una cover zone. In pratica una porzione di background viene ritagliata e renderizzata di fronte all'actor, dando l'illusione di oggetto 3D. Tutto questo richiedeva un lavoro probabilmente manuale incredibile, perchè andava fatto per ogni oggetto per ogni possibile inquadratura.
- Ogni logica di gioco era gestita tramite un linguaggio di scripting proprietario. Circa 650 scripts (1 script per ogni actor, evento possibile).

In questo progetto ho mantenuto i concetti ma modernizzato l'infrastruttura (ad esempio scripts in lua, e VM in rust).
Vi faccio un esempio di confronto tra due script.

Questo era lo script originale (ricostruito) che gestiva la logica dell'armadio da spingere per coprire la finestra in soffitta (ammetto che senza AI non avrei saputo da dove partire).

CODICE
-- LIFE SCRIPT 1
return function()
    ::pc_0::
    if engine.get_actor_var(9) ~= 2 then goto pc_132 end
    ::pc_10::
    if engine.get_actor_var(15) ~= 1 then goto pc_124 end
    ::pc_20::
    engine.switch(engine.get_actor_var_for(1, 5))
    ::pc_26::
    if engine.get_switch_val() == 2 then goto pc_102 end
    ::pc_32::
    if engine.get_actor_var_for(1, 6) ~= 1 then goto pc_98 end
    ::pc_44::
    if engine.get_actor_var(18) ~= engine.get_actor_var(0) then goto pc_50 end
    ::pc_52::
    engine.anim_all_once(21, 3)
    ::pc_58::
    engine.set_target_actor(3)
    -- [INVALID OPCODE]
    ::pc_62::
    engine.anim_once(6, -1)
    ::pc_68::
    engine.set_target_actor(1)
    engine.move(0, -1)
    ::pc_76::
    engine.set_var(0, 0)
    ::pc_84::
    engine.set_target_actor(1)
    engine.anim_once(8, 4)
    ::pc_92::
    engine.sample(37)
    ::pc_98::
    goto pc_120
    ::pc_102::
    if engine.get_switch_val() == 5 then goto pc_120 end
    ::pc_108::
    engine.type(16)
    ::pc_112::
    engine.set_var(1, 1)
    ::pc_120::
    goto pc_128
    ::pc_124::
    engine.type(0)
    ::pc_128::
    goto pc_230
    ::pc_132::
    engine.switch(engine.get_actor_var(5))
    ::pc_136::
    if engine.get_switch_val() == 6 then goto pc_202 end
    ::pc_142::
    if engine.get_actor_var(6) ~= 1 then goto pc_198 end
    ::pc_152::
    if engine.get_actor_var(32) ~= engine.get_actor_var(4) then goto pc_158 end
    ::pc_160::
    engine.do_move()
    ::pc_162::
    if engine.get_actor_var(29) ~= engine.get_actor_var(4) then goto pc_190 end
    ::pc_170::
    engine.anim_all_once(17, 100)
    ::pc_176::
    engine.set_target_actor(1)
    engine.move(1, -1)
    ::pc_184::
    engine.set_var(0, 1)
    ::pc_192::
    engine.anim_once(7, -1)
    ::pc_198::
    goto pc_230
    ::pc_202::
    if engine.get_switch_val() == 7 then goto pc_230 end
    ::pc_208::
    if engine.get_actor_var(6) ~= 1 then goto pc_230 end
    ::pc_218::
    engine.body(2)
    ::pc_224::
    engine.anim_once(-1, -1)
    ::pc_230::
    -- END SCRIPT
    return
end


Questa la nuova versione

CODICE
-- =============================================================================
-- ACTOR: Wardrobe (Attic Room 0)
-- =============================================================================

return function(self)
    engine.setup(self, {
        pushable = {
            direction = { 1.0, 0.0 }, -- Push along +X axis towards window
            max_dist = 2.70,
            step_speed = 0.5,
            sound = 37,
            sound_interval = 0.35,
            flag_on_complete = "WINDOW_BLOCKED"
        },
        examinable = {
            open_anim = 73,
            message = 100,
            sound = 37
        },
        container = {
            items = { 3, 5 } -- cavalry sabre, old indian cover
        },
        solid = {
            half_x = 0.5,
            half_z = 0.5
        }
    })
end


Vi lascio infine qualche screenshot di qualche sequenza replicata (ho provato intanto a modificare un po' i fondali rendendoli più tetri, ovviamente coi vecchi modelli e illuminazione base contrasta un po')


 
Ray1184
messaggio21 Aug 2026, 21:03
Messaggio #6





Gruppo: Gamer
Messaggi: 94
Iscritto il: 31 December 13
Utente Nr.: 20.239
BGE Alone in the dark
SO Windows7




CITAZIONE (utdefault @ 21 Aug 2026, 02:11) *
Ciao, Ray. Bentornato! Sicuramente sarai più vecchio di un decennio fa, ahahah.
In tutti i modi, grazie e complimenti per la ripresa di questo progetto.
A tue future news.

Bye.

p.s.
potresti sfruttare l'engine quando terminato per creare una tua avventura dinamica (survival) horror. Magari basata sugli eventi di questa fase novennale.
Qualcosa del genere... biggrin.gif
.
..
...

Revision 0.9

Sono trascorsi 9 anni. Un uomo torna nello studio dove aveva abbandonato un misterioso progetto.
Frugando in un cassetto del vecchio ufficio ritrova i suoi appunti archiviati. Durante la lettura scopre che il lavoro non è rimasto incompiuto.
Esaminando delle tracce di revisione intuisce che qualcosa di inspiegabile sia accaduto nei locali.
L'ultimo frammento sembra celare una memoria evocativa.


Questa sicuramente è l'idea principale! Anche solo per slegarmi dagli assets di alone in the dark (che ovviamente non possono essere ridistribuiti). Ora devo "solo" trovare un modo che davvero mi permette di replicare i vecchi fondali in modo quanto piu fedele a partire da un rendering!
 
TheRuler
messaggio23 Aug 2026, 10:29
Messaggio #7



Gruppo icone

Gruppo: SMod
Messaggi: 14.517
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




CITAZIONE
Questo era lo script originale (ricostruito) che gestiva la logica dell'armadio da spingere per coprire la finestra in soffitta (ammetto che senza AI non avrei saputo da dove partire).
l'AI applicata al coding fa meraviglie. Non è precisa al 100% (ho visto che non c'è funzione pc_50) ma spesso e volentieri ti mette sulla strada giusta. E sta migliornado ad un passo incredibile.

CITAZIONE
- Il modello 3d di carnby ha almeno 10 varianti, perchè ai tempi non esisteva il concetto di animazione skeletrica, joint e armature. C'era il modello di carnby con la lanterna, quello col fucile, quella con la spada ecc...
bellissima questa cosa. in effetti se la tecnologia non ti aiutava, ci pensava l'hardware, che stava migliorando più velocemente del software.
Non c'era ancora il CDROM, ma gli hard disk stavano diventando sempre più grandi e quindi problemi di storage non ce ne erano.

Tienici aggiornati mi raccomando!!!!


--------------------
 
Ray1184
messaggio23 Aug 2026, 11:02
Messaggio #8





Gruppo: Gamer
Messaggi: 94
Iscritto il: 31 December 13
Utente Nr.: 20.239
BGE Alone in the dark
SO Windows7




CITAZIONE (TheRuler @ 23 Aug 2026, 11:29) *
CITAZIONE
Questo era lo script originale (ricostruito) che gestiva la logica dell'armadio da spingere per coprire la finestra in soffitta (ammetto che senza AI non avrei saputo da dove partire).
l'AI applicata al coding fa meraviglie. Non è precisa al 100% (ho visto che non c'è funzione pc_50) ma spesso e volentieri ti mette sulla strada giusta. E sta migliornado ad un passo incredibile.

CITAZIONE
- Il modello 3d di carnby ha almeno 10 varianti, perchè ai tempi non esisteva il concetto di animazione skeletrica, joint e armature. C'era il modello di carnby con la lanterna, quello col fucile, quella con la spada ecc...
bellissima questa cosa. in effetti se la tecnologia non ti aiutava, ci pensava l'hardware, che stava migliorando più velocemente del software.
Non c'era ancora il CDROM, ma gli hard disk stavano diventando sempre più grandi e quindi problemi di storage non ce ne erano.

Tienici aggiornati mi raccomando!!!!


Si, considera che gli scripts non li ho generati tramite AI ma tramite un transplier meccanico (programmato con aiuto dell'AI) che letteralmente fa la traduzione del vecchio bytecode (e ci siamo accorti che c'erano proprio delle zone morte, tipo la label che hai notato tu).
L'AI accelera molto, ma il lavoro da fare rimane comunque tantissimo. Bisogna tener l'occhio su ogni cosa che fa e controllare, perchè ci mette un attimo a perdere di vista un vincolo architetturale o un obiettivo definito.
 
Ray1184
messaggio30 Aug 2026, 17:26
Messaggio #9





Gruppo: Gamer
Messaggi: 94
Iscritto il: 31 December 13
Utente Nr.: 20.239
BGE Alone in the dark
SO Windows7




Piccolo aggiornamento: spinto dalla curiosità ho provato a implementare un sistema di illuminazione dinamica sui fondali prerendered, devo dire che ha il suo perchè:



Ovviamente il background che vedete non fa parte dell'originale ma è stato creato appositamente (negli originale sarà molto difficile fare GI, perchè serve la scena 3d originale con cui hanno fatto i render per esportare depth e normal map). Questi li ho fatto in blender e poi ritoccati a mano.
Non è ancora finita, al momento l'illuminazione tiene conto solo dei fondali e della profondità della scena, ma esclude gli oggetti 3d puri (come il player), inoltre l'illuminazione è abbastanza piatta e non proietta ombre. Prossimi step saranno finalizzare queste features.
 
TheRuler
messaggio30 Aug 2026, 17:54
Messaggio #10



Gruppo icone

Gruppo: SMod
Messaggi: 14.517
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Ma è stupendo! Hai disegnato tu quel fondale?!?! sei un grande. Sembra una location di AITD al 100%.


--------------------
 
Ray1184
messaggio30 Aug 2026, 18:37
Messaggio #11





Gruppo: Gamer
Messaggi: 94
Iscritto il: 31 December 13
Utente Nr.: 20.239
BGE Alone in the dark
SO Windows7




CITAZIONE (TheRuler @ 30 Aug 2026, 18:54) *
Ma è stupendo! Hai disegnato tu quel fondale?!?! sei un grande. Sembra una location di AITD al 100%.

Grazie! Disegnato è un parolone, al momento uso una pipeline di questo tipo:

- primo render della scena da blender (illuminazione base con eevee e assets/texture base, niente di elaborato) --> per l'illuminazione dinamica per ogni inquadratura mi serve background "buio", background a massima illuminazione, mappa di profondità e mappa normale.
- passaggio AI per aggiungere qualche piccolo dettaglio da gestire come 3d (ragnatele, graffi, texture leggermente più randomizzatA)
- passaggio con penna grafica/mouse per ammorbidire chiaro/scuri (questo fa molto, dona molto l'effetto disegno)
- downsample a 320x200 a 256 colori

Ora il secondo passaggio (prompt velocissimo su gemini) è per la prototipazione, ma a regime vorrei escludere l'AI dal processo artistico (cambiando troppo velocemente non può garantirmi output coerenti nel tempo)
 
Ray1184
messaggio30 Aug 2026, 20:45
Messaggio #12





Gruppo: Gamer
Messaggi: 94
Iscritto il: 31 December 13
Utente Nr.: 20.239
BGE Alone in the dark
SO Windows7




Ecco qui, illuminazione dinamica e ombre realtime! Finalmente AITD ha ombre vere e non prerenderizzate (ovviamente nel rispetto dello stile classico per non stonare con gli sfondi prerendered)



Sicuramente è una feature interessante che dona molta atmosfera pur mantenendo il fascino retrò. Vedere carnby camminare con la lanterna e vedere le ombre realtime muoversi minacciose ha il suo perchè.

Appena possibile allegherò un video, e quando riuscirò a fare un player animato nuovo caricherò una breve tech demo (al momento usa ancora l'asset originale di carnby, non vorrei avere rogne a distribuirlo)

Messaggio modificato da Ray1184 il 31 Aug 2026, 10:17
 

Reply to this topicStart new topic
1 utenti stanno leggendo questa discussione (1 visitatori e 0 utenti anonimi)
0 utenti:

 

Modalità di visualizzazione: Normale · Passa a: Lineare · Passa a: Outline


Versione Lo-Fi Oggi è il: 7th September 2026 - 14:03