Benvenuto Visitatore(Log In|Registrati)

189 Pagine V  « < 25 26 27 28 29 > »   
Reply to this topicStart new topic
> [PC-DOS] HEROQUEST by Gremlin (1991) REMASTERED, - Modding, Bugfixing e Traduzione ITA/ESP devlog
TheRuler
messaggio13 Mar 2024, 01:27
Messaggio #651



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
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 (raul @ 12 Mar 2024, 22:24) *
Intendevo dire che queste coordinate dovrebbero essere usate come esempio per la spiegazione degli eroi, ma beh, sarebbe un sovraccarico di pagine. Aggiungere le X e le Y nella tabella

La spiegazione indica già che il primo byte è X e il secondo Y: https://moddingwiki.shikadi.net/wiki/HeroQu...#Hero_Positions
Per quanto riguarda la tabella è superfluo indicarlo, tutti sanno che orizzontale è X e verticale Y.

CITAZIONE
Ho appena finito con i tesori e le trappole. Domani continuerò e scaricherò anche notepad ++.
Cosa stai facendo che mi incuriosisce?


In che senso finito con tesori e trappole?
Io ho guardato il problema del blocco del proiettile attraverso caselle con porte segrete.
Ho scoperto che è presente anche se spari in verticale e in mezzo c'è una porta segreta. Anche la porta normale aperta blocca la linea di vista!
Ho capito dove fa il controllo nel codice, l'ho trovato al primo colpo cercando il codice relativo al controllo della balestra (10h) vicino alle altre armi da lancio:

CODICE
01EF:0AD4  F6451110            test byte [di+11],10        ds:[46A8]=0010 <-- balestra
01EF:0AD8  750F                jne  00000AE9 ($+f)         (down)
01EF:0ADA  F6451120            test byte [di+11],20        ds:[46A8]=0010 <-- ascia
01EF:0ADE  7509                jne  00000AE9 ($+9)         (down)
01EF:0AE0  F6451140            test byte [di+11],40        ds:[46A8]=0010 <-- lancia
01EF:0AE4  7503                jne  00000AE9 ($+3)         (down)
01EF:0AE6  B0FC                mov  al,FC
01EF:0AE8  C3                  ret

Se hai visto la pagina del savegame, il gioco salva l'inventario come maschera di bit. E guarda cosa sono 10,20 e 40?

Una volta trovato il punto dove controllare ho messo un breakpoint. Così quando testo il gioco con il debugger l'elaborazione si mette in pausa appena scocco un dardo.
Andando poi passo passo ho trovato il check della casella sulla traiettoria tra eroe e mostro:

CODICE
il check della casella lo fa qui (sbagliando il 28) TRAIETTORIA ORIZZONTALE:
01EF:1221  80BF6F5600          cmp  byte [bx+566F],00      ds:[576C]=8128
01EF:1226  742A                je   00001252 ($+2a)        (no jmp)
01EF:1228  8A876F56            mov  al,[bx+566F]           ds:[576C]=8128 <-- 28 è la casella con porta segreta
01EF:122C  833EE93701          cmp  word [37E9],0001       ds:[37E9]=0001 <-- 1=orizzontale, 0=verticale
01EF:1231  7411                je   00001244 ($+11)        (no jmp)
01EF:1233  24AC                and  al,AC                                     <-- qui controlla l'AND binario se VERTICALE (con A0 FUNZIONA ma rompe altro)
01EF:1235  0AC0                or   al,al                                        contolla se in mezzo ci sono muri o porte orizzontali
01EF:1237  7419                je   00001252 ($+19)        (no jmp)
01EF:1239  A820                test al,20                                    <-- porta orizzontale
01EF:123B  7442                je   0000127F ($+42)        (down)
01EF:123D  A804                test al,04                                    <-- porta aperta
01EF:123F  743E                je   0000127F ($+3e)        (down)
01EF:1241  EB0F                jmp  short 00001252 ($+f)   (down)
01EF:1243  90                  nop
01EF:1244  245C                and  al,5C                                     <-- qui controlla l'AND binario (con 50 FUNZIONA ma rompe altro)
01EF:1246  0AC0                or   al,al                                        controlla se ci sono muri o porte verticali
01EF:1248  7408                je   00001252 ($+8)         (down)
01EF:124A  A810                test al,10                                    <-- porta verticale
01EF:124C  7431                je   0000127F ($+31)        (down)
01EF:124E  A804                test al,04                                    <-- porta aperta
01EF:1250  742D                je   0000127F ($+2d)        (down)
01EF:1252  803EEB3701          cmp  byte [37EB],01         ds:[37EB]=6E03
01EF:1257  742B                je   00001284 ($+2b)        (down)
01EF:1259  80BF6F5800          cmp  byte [bx+586F],00      ds:[1576F]=3637
01EF:125E  740E                je   0000126E ($+e)         (down)
01EF:1260  8A876F58            mov  al,[bx+586F]           ds:[1576F]=3637
01EF:1264  BB4649              mov  bx,4946

Ho trovato il controllo dei casi di linea di vista orizzontale e verticale e ho eliminato la componente della porta segreta e porta aperta.
Prendiamo l'esempio della porta orizzontale (29h) su linea di vista orizzontale in accordo con il wall_layout:
l'istruzione 01EF:1244 245C , fa l'AND logico con 5C
bisogna convertire tutto da esadecimale in binario quindi:
CODICE
29 = 00101001
5C = 01011100
and= 00001000

poi verifica l'OR logico ed essendoci un 1 (l'or vuole tutti 0 per dare zero) il codice salta via credendo che la casella sia impassabile.




Ho sostituito i valori di controllo H e V in modo da non tener conto delle porte segrete/aperte così 5C=50 e AC=A0.
Funziona, ma purtroppo non era ancora possibile sparare attraverso le porte aperte.
Ho cambiato anche i check successivi 04=porta_aperta e ho risolto.

se vuoi provare, fammi sapere se ho rotto altro:

CITAZIONE
SOLUZIONE:
All'offset 0x1654 sostituire AC con A0
All'offset 0x165E sostituire 04 con 20
All'offset 0x1665 sostituire 5C con 50
All'offset 0x166F sostituire 04 con 10


Studiando questa logica ho capito il perché del bug che ti permette di lanciare un incantesimo in un'altra stanza scoperta se sei a contatto con un muro.
Non controlla la casella su cui sei presente ma parte dalla successiva.
Di fatto è possibile uccidere questo goblin con la balestra e con la palla di fuoco:
File Allegato  Screenshot_2024_03_13_012242.png ( 18.08k ) Numero di download: 0

Verificalo prima di applicare i cambiamenti.
Ti allego una versione modificata della quest 21 che ti fa partire con l'elfo vicino. Nel corridoio a destra verticale ho messo in alto uno scheletro così controlli anche la linea di vista con porta aperta.File Allegato  QUEST21.ZIP ( 906byte ) Numero di download: 3


--------------------
 
raul
messaggio13 Mar 2024, 15:33
Messaggio #652



Gruppo icone

Gruppo: OldGamer
Messaggi: 2.695
Iscritto il: 15 September 17
Da: España
Utente Nr.: 21.627
SO Sono un BOT, cancellami l'account




Ben fatto... Inizierò a testare appena possibile.
Solo nelle sezioni con le porte possono impedirti di sparare o sai come farlo senza quelle porte?
 
TheRuler
messaggio13 Mar 2024, 16:40
Messaggio #653



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
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 (raul @ 13 Mar 2024, 15:33) *
Solo nelle sezioni con le porte possono impedirti di sparare o sai come farlo senza quelle porte?

Rielabora la domanda, non ho capito.


Il codice originale permette all'elfo in quella posizione di uccidere i tre mostri nella stanza scoperta col genio. Si tratta della scala: appena il check arriva alla scala l'attacco viene dato come valido e il proiettile parte.
Fa troppo ridere questa cosa. La linea di vista è decisamente bacata.
File Allegato  Screenshot_2024_03_13_163828.png ( 21.88k ) Numero di download: 1


--------------------
 
raul
messaggio13 Mar 2024, 18:42
Messaggio #654



Gruppo icone

Gruppo: OldGamer
Messaggi: 2.695
Iscritto il: 15 September 17
Da: España
Utente Nr.: 21.627
SO Sono un BOT, cancellami l'account




CITAZIONE (TheRuler @ 13 Mar 2024, 01:27) *
Ti allego una versione modificata della quest 21 che ti fa partire con l'elfo vicino. Nel corridoio a destra verticale ho messo in alto uno scheletro così controlli anche la linea di vista con porta aperta.File Allegato  QUEST21.ZIP ( 906byte ) Numero di download: 3

Questo file non è stato modificato, in quanto sono presenti le schermate.
 
TheRuler
messaggio13 Mar 2024, 19:46
Messaggio #655



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
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 (raul @ 13 Mar 2024, 18:42) *
CITAZIONE (TheRuler @ 13 Mar 2024, 01:27) *
Ti allego una versione modificata della quest 21 che ti fa partire con l'elfo vicino. Nel corridoio a destra verticale ho messo in alto uno scheletro così controlli anche la linea di vista con porta aperta.File Allegato  QUEST21.ZIP ( 906byte ) Numero di download: 3

Questo file non è stato modificato, in quanto sono presenti le schermate.

Non ho capito. quali schermate?
Il file è modificato come ti ho spiegato sopra.


--------------------
 
raul
messaggio13 Mar 2024, 19:56
Messaggio #656



Gruppo icone

Gruppo: OldGamer
Messaggi: 2.695
Iscritto il: 15 September 17
Da: España
Utente Nr.: 21.627
SO Sono un BOT, cancellami l'account




Intendo dire che non mi sembra che sia stato modificato, come mostrano gli screenshot che hai postato.

Messaggio modificato da raul il 13 Mar 2024, 19:59
 
TheRuler
messaggio13 Mar 2024, 20:15
Messaggio #657



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
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 (raul @ 13 Mar 2024, 19:56) *
Intendo dire che non mi sembra che sia stato modificato, come mostrano gli screenshot che hai postato.

Ma l'hai provato?
le schermate sopra sono della missione 2. Il file è la 21.


--------------------
 
raul
messaggio13 Mar 2024, 21:06
Messaggio #658



Gruppo icone

Gruppo: OldGamer
Messaggi: 2.695
Iscritto il: 15 September 17
Da: España
Utente Nr.: 21.627
SO Sono un BOT, cancellami l'account




OK, ora capisco tutto.
Sì, sono riuscito a usare la balestra senza problemi contro lo zombie nella missione 21, e allo stesso tempo non sono riuscito a sparare nel corridoio dall'altra parte che ha come ostacolo la roccia che fa da muro, quindi quella sezione è perfetta.


La domanda che ho fatto all'inizio era se il blocco del tiro con la balestra dipende dalla presenza di una porta?
Lo chiedo a causa degli scheletri nell'immagine, che possono usare la balestra.


Ho un'altra brutta notizia: è possibile utilizzare le armi con attacco diagonale attraverso la roccia del muro.


Messaggio modificato da raul il 13 Mar 2024, 21:24
 
raul
messaggio13 Mar 2024, 21:38
Messaggio #659



Gruppo icone

Gruppo: OldGamer
Messaggi: 2.695
Iscritto il: 15 September 17
Da: España
Utente Nr.: 21.627
SO Sono un BOT, cancellami l'account




CITAZIONE (TheRuler @ 13 Mar 2024, 16:40) *
Il codice originale permette all'elfo in quella posizione di uccidere i tre mostri nella stanza scoperta col genio. Si tratta della scala: appena il check arriva alla scala l'attacco viene dato come valido e il proiettile parte.
Fa troppo ridere questa cosa. La linea di vista è decisamente bacata.

Ha più errori di quanto pensassi inizialmente. Ne ho fatti alcuni anche nella missione 2 e ci sono cose strane, come ad esempio che dalla porta posso sparare al goblin ma non all'orco.



Ma quella che trovo più strana e importante è che se si può sparare attraverso il muro con la balestra o gli incantesimi ma non si può attaccare in mischia. Si potrebbe usare la stessa logica della mischia con la balestra e gli incantesimi?
Non capisco perché non programmino questi comportamenti allo stesso modo.


Messaggio modificato da raul il 13 Mar 2024, 21:53
 
TheRuler
messaggio14 Mar 2024, 09:20
Messaggio #660



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
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 (raul @ 13 Mar 2024, 21:06) *
La domanda che ho fatto all'inizio era se il blocco del tiro con la balestra dipende dalla presenza di una porta?
Lo chiedo a causa degli scheletri nell'immagine, che possono usare la balestra.

la linea di vista orizzontale è bloccata da muri e porte chiuse verticali, mentre
la linea di vista verticale è bloccata da muri e porte chiuse orizzontali.

Con il mio fix ho rimosso dalla verifica le porte segrete e le porte aperte visto che le porte segrete, quando visualizzate, sono SEMPRE aperte.
La linea di vista è proprio rotta. Al momento non ho idea di come aggiustarla.
il problema è intrinseco al metodo che hanno utilizzato per la gestione della mappa e la maschera di bit usata per il check.

Se avessero dato la possibilità di settare per ogni casella i 4 muri possibili, invece che solo quelli nord e ovest, sarebbe stato perfetto, invece hanno voluto risparmiare un byte.
CITAZIONE
Ho un'altra brutta notizia: è possibile utilizzare le armi con attacco diagonale attraverso la roccia del muro.

Problema che mi aspettavo, la roccia per terra è controllata solo nelle routine di movimento, non per quella di attacco (distanza/corpo a corpo/magia).
Il fix più facile che mi viene in mente è modificare le mappe in modo da aggiungere muri invisibili attorno alle rocce.
EDIT: no, non funziona. si può colpire lo stesso anche se attrono ci sono muri. Incredibile.
Con il bastone si può colpire questo Zombi:
File Allegato  Screenshot_2024_03_14_105648.png ( 14.42k ) Numero di download: 1

Puoi giocare qualunque missione con un solo eroe equipaggiato con balestra e bastone. Gli basta aprire le porte e da fuori stanza fa una strage.



Ho aggiornato come al solito il primo post con i nuovi bug segnati.


--------------------
 
raul
messaggio14 Mar 2024, 15:30
Messaggio #661



Gruppo icone

Gruppo: OldGamer
Messaggi: 2.695
Iscritto il: 15 September 17
Da: España
Utente Nr.: 21.627
SO Sono un BOT, cancellami l'account




Si potrebbe creare una porta invisibile con una bandiera di blocco in modo che non possano attraversarla (forse non è nemmeno necessario) per bloccare la balestra come è successo con la mummia? Forse con questa tecnica si potrebbe avere una soluzione parziale per le altre sezioni con lo stesso problema.



CITAZIONE (TheRuler @ 14 Mar 2024, 09:20) *
Puoi giocare qualunque missione con un solo eroe equipaggiato con balestra e bastone. Gli basta aprire le porte e da fuori stanza fa una strage.

Sì, ve ne ho già parlato, l'unico inconveniente è che se uccidete un mostro che lascia cadere dell'equipaggiamento, non lo otterrete.

Messaggio modificato da raul il 14 Mar 2024, 15:31
 
TheRuler
messaggio14 Mar 2024, 17:36
Messaggio #662



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
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




il problema dei sassi che non bloccano la linea di vista è secondario, non cambierei il codice. Quello che ho scritto sopra andrebbe bene in questo caso.
CITAZIONE
Problema che mi aspettavo, la roccia per terra è controllata solo nelle routine di movimento, non per quella di attacco (distanza/corpo a corpo/magia).
Il fix più facile che mi viene in mente è modificare le mappe in modo da aggiungere muri invisibili attorno alle rocce.


--------------------
 
raul
messaggio14 Mar 2024, 18:02
Messaggio #663



Gruppo icone

Gruppo: OldGamer
Messaggi: 2.695
Iscritto il: 15 September 17
Da: España
Utente Nr.: 21.627
SO Sono un BOT, cancellami l'account




Beh, niente, un altro bug per la lista.
La cosa positiva è che ne rimangono sempre meno.
 
TheRuler
messaggio14 Mar 2024, 23:56
Messaggio #664



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
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 (raul @ 14 Mar 2024, 18:02) *
Beh, niente, un altro bug per la lista.
La cosa positiva è che ne rimangono sempre meno.

Stanno restando i bug più difficili.

Sto facendo ordine, ho cominciato a compilare la pagina di moddingwiki relativa alle routine dentro l'exe.

Ho studiato per bene il codice di lancio e devo dire che è piuttosto complesso; fa controlli e imposta variabili che non credevo, oltre a immagazzinare le coordinate XY dell'eroe, del mostro e del proiettile, verifica anche la distanza X e Y tra i tre, e se il mostro si trova a destra, sinistra, sopra e sotto rispetto all'eroe. C'è tutto quello che serve sapere, capire come aggiustarlo è un problema.

Se a contatto con un muro lo puoi oltrepassare se il mostro è sopra, a sinistra o in una qualsiasi direzione perfettamente diagonale.

Come per l'attacco in mischia, anche qui la diagonale è rotta, ho colpito il mostro che era sotto il puntatore del mouse da qui:
File Allegato  Screenshot_2024_03_14_234829.png ( 34.64k ) Numero di download: 0


--------------------
 
raul
messaggio15 Mar 2024, 06:42
Messaggio #665



Gruppo icone

Gruppo: OldGamer
Messaggi: 2.695
Iscritto il: 15 September 17
Da: España
Utente Nr.: 21.627
SO Sono un BOT, cancellami l'account




CITAZIONE (TheRuler @ 14 Mar 2024, 23:56) *
Ho studiato per bene il codice di lancio e devo dire che è piuttosto complesso; fa controlli e imposta variabili che non credevo, oltre a immagazzinare le coordinate XY dell'eroe, del mostro e del proiettile, verifica anche la distanza X e Y tra i tre, e se il mostro si trova a destra, sinistra, sopra e sotto rispetto all'eroe. C'è tutto quello che serve sapere, capire come aggiustarlo è un problema.

Credo che dovreste lasciare questo problema per la fine, ricercandone uno meno difficile, come il punto 25.
25- Il signore degli stregoni può essere ucciso dalla magia nella missione 24.

CITAZIONE
Se a contatto con un muro lo puoi oltrepassare se il mostro è sopra, a sinistra o in una qualsiasi direzione perfettamente diagonale.

Così lontano? È completamente rotto, ora sembra un alfiere degli scacchi.

Messaggio modificato da raul il 15 Mar 2024, 06:57
 
TheRuler
messaggio15 Mar 2024, 12:18
Messaggio #666



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
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 (raul @ 15 Mar 2024, 06:42) *
Credo che dovreste lasciare questo problema per la fine, ricercandone uno meno difficile, come il punto 25.
25- Il signore degli stregoni può essere ucciso dalla magia nella missione 24.
Tutta la conoscenza che sto costruendo con la linea di vista sarà utile per il movimento. Condividono parte del codice.


CITAZIONE
Così lontano? È completamente rotto, ora sembra un alfiere degli scacchi.

Se in mezzo ci sono solo stanze non attive (marcate con 00) queste vengono oltrepassate senza controllare nulla.
Si potrebbe cercare un valore diverso per eliminare almeno quel problema, ma la questione più grave rimarrebbe, ovvero sparare ttraverso un muro tra due stanze attive.


--------------------
 
raul
messaggio15 Mar 2024, 14:12
Messaggio #667



Gruppo icone

Gruppo: OldGamer
Messaggi: 2.695
Iscritto il: 15 September 17
Da: España
Utente Nr.: 21.627
SO Sono un BOT, cancellami l'account




CITAZIONE (TheRuler @ 15 Mar 2024, 12:18) *
sarà utile per il movimento. Condividono parte del codice.

In questo caso vi invio un incantesimo del genio affinché siate 2 in questo progetto.


CITAZIONE
Se in mezzo ci sono solo stanze non attive (marcate con 00) queste vengono oltrepassate senza controllare nulla.
Si potrebbe cercare un valore diverso per eliminare almeno quel problema, ma la questione più grave rimarrebbe, ovvero sparare ttraverso un muro tra due stanze attive.

Sistemare 1 cosa è sempre un grande passo in questo gioco, non tutto può essere fatto ma almeno renderlo il più decente possibile è un risultato, in ogni caso, oggi è un gioco molto migliore di prima e nessuno può contestarlo.

Messaggio modificato da raul il 15 Mar 2024, 22:38
 
TheRuler
messaggio18 Mar 2024, 15:26
Messaggio #668



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
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




I really struggle to find a proper workaround for the shooting routine. I am really starting to think it would be better to create another on from scratch (saving some blocks) rather than fix it.

I've annotated every possible bit I could find here.

Is anyone out there with fresh eyesight that could take a look and help?
Maybe it is a matter of swapping two registry in a mov instruction...



--------------------
 
TheRuler
messaggio20 Mar 2024, 14:34
Messaggio #669



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
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




Decompilando l'exe con IDA ho definito quali sono le funzioni che si occupano dei due pathfinding, quello che funziona alla perfezione è quello dell'eroe mentre quello "rotto" è quello dei mostri.
L'hanno voluto fare proprio così: rendere impossibile ai mostri lasciare la stanza in cui nascono.
Ho provato a dirottare la funzione del mostro verso quella dell'eroe ma non funziona (sarebbe stato troppo bello) sebbene non vada in crash nulla perché le aree di memoria e i registri usati sono gli stessi.
Per avere una visione di quanto differiscono le due funzioni:

Eroe
File Allegato  Screenshot_2024_03_20_142345.png ( 20.33k ) Numero di download: 3


Mostro
File Allegato  Screenshot_2024_03_20_142245.png ( 31.45k ) Numero di download: 2


--------------------
 
raul
messaggio20 Mar 2024, 15:26
Messaggio #670



Gruppo icone

Gruppo: OldGamer
Messaggi: 2.695
Iscritto il: 15 September 17
Da: España
Utente Nr.: 21.627
SO Sono un BOT, cancellami l'account




TI MANDO IN LINGUA HEROQUEST UN SACCO DI INCORAGGIAMENTO, SI PUÒ !!!!

 
TheRuler
messaggio23 Mar 2024, 10:00
Messaggio #671



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
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




Only an update, no solution yet (neither shooting nor monster movement).
Studying the hero's movement I've found out how the game make it happen, and it is very clever. It checks for every possible actual impediment on the map, monsters, heroes, furniture, closed/hidden doors. This pathfinding is COMPLETE. I can't believe they didn't use the same algorithm for monster's movements also. Probably because there is no actual animation for monsters, only a moving icon on the map.

The "click on a tile player's action" triggers a routine that draws ANOTHER 26x19 virtual map and build all possible paths of the hero:

Starting from memory location 0B6B:0A0E the following 512 bytes are set to 1A1A x100h (256 times) by this function:
CODICE
01EF:2DE9  B90001              mov  cx,0100
01EF:2DEC  50                  push ax
01EF:2DED  B86B0B              mov  ax,0B6B
01EF:2DF0  8EC0                mov  es,ax
01EF:2DF2  58                  pop  ax
01EF:2DF3  B81A1A              mov  ax,1A1A
01EF:2DF6  F3AB                repe stosw

basically cleaning all previous paths taken in the previous turn by a hero.

Then the code from 01EF:6449 builds up all the possible paths from a starting tile to the maximum reachable tile.
In this case I've rolled a 11 and note how the code stops building a path at 7, when it reaches the point of no return based an the left steps required to reach the destination.

CODICE
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 07 06 07 08 09 1A 09 08
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 07 06 05 06 09 0A 09 08 07
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 06 05 04 05 0A 0B 0A 09 06
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 05 04 03 04 0B 1A 1A 1A 05
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 03 02 01 02 01 02 03 04
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 05 04 03 02 1A 1A 1A 1A 05
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 06 05 04 03 1A 1A 1A 1A 06
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 07 06 05 04 1A 1A 1A 1A 07
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 07 06 05 1A 1A 1A 1A 1A
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 07 06 07 08 09 -- 09 08
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 07 06 05 06 09 0A 09 08 07
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 06 05 04 05 0A 0B 0A 09 06
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 05 04 03 04 0B -- -- -- 05
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 03 02 01 02 01 02 03 04
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 05 04 03 02 -- -- -- -- 05
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 06 05 04 03 -- -- -- -- 06
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 07 06 05 04 -- -- -- -- 07
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 07 06 05 -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

1A removed for better reading.

File Allegato  Screenshot_2024_03_23_092310.png ( 45.03k ) Numero di download: 0


Here is the graphical game map, where the starting hero tile is pointed by the mouse (the 02 between those 01 in the sequence 03 02 01 02 01 02 03 above) and the ending tile is where the dwarf is (0B in the code map)

There also is another temporary location where all the math and possible paths are aligned, here is the variable values I've found so far:

hero's movement
3FEE = HERO'S X STARTING POSITION
3FEF = HERO'S Y STARTING POSITION
3FF0 = mouse click X position
3FF1 = mouse click Y position
3FF2 = 03
3FF3 = FF
3FF4 = FF
3FF5 = HERO'S X POSITION (copy)
3FF6 = HERO'S Y POSITION (copy)
3FF9 = rolled movement
3FFB - 4005 = math locations that varies among 00,01,02,03, at the end every byte is set to 03


this is the final block of the function 2DFF that sets those locations recursively:
CODICE
loc_12E72:
mov     byte ptr ds:3FF2h, 0
dec     byte ptr ds:3FF6h
call    sub_12DFF    <-- call itself again
inc     byte ptr ds:3FF6h
mov     byte ptr ds:3FF2h, 1
inc     byte ptr ds:3FF5h
call    sub_12DFF    <-- call itself again
dec     byte ptr ds:3FF5h
mov     byte ptr ds:3FF2h, 2
inc     byte ptr ds:3FF6h
call    sub_12DFF    <-- call itself again
dec     byte ptr ds:3FF6h
mov     byte ptr ds:3FF2h, 3
dec     byte ptr ds:3FF5h
call    sub_12DFF    <-- call itself again
inc     byte ptr ds:3FF5h

What I don't know yet is the values of 3FF3-6 and why the values are seto to 00-03 only. Possible 4 directions to check?


Once every byte is set to 03, the hero's moving animation is then delegated to in-game the main loop routines.


--------------------
 
raul
messaggio23 Mar 2024, 10:37
Messaggio #672



Gruppo icone

Gruppo: OldGamer
Messaggi: 2.695
Iscritto il: 15 September 17
Da: España
Utente Nr.: 21.627
SO Sono un BOT, cancellami l'account




Bene, state andando avanti e questa è la cosa più importante.
Sono abbastanza sicuro che tutto ciò che non sono riusciti a implementare in questo gioco l'hanno fatto con Space Cruise. Più gioco a quel gioco e più ne sono convinto.
 
TheRuler
messaggio23 Mar 2024, 22:18
Messaggio #673



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
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 (raul @ 23 Mar 2024, 10:37) *
Bene, state andando avanti e questa è la cosa più importante.
Sono abbastanza sicuro che tutto ciò che non sono riusciti a implementare in questo gioco l'hanno fatto con Space Cruise. Più gioco a quel gioco e più ne sono convinto.

Non faccio progressi, credo di essere arrivato al limite delle mie conoscenze. Finora tutti i bug risolti erano uno scherzo in confronto a questo, il patfinding dei mostri è GIGANTESCO e totalmente diverso da quello dell'eroe. Scrivono e leggono mappe diverse, sembra che le due funzioni siano state pensate da due persone diverse (il che è probabile).
Quindi non vorrei smorzare gli animi ma se non ricevo una mano il pathfinding rimarrà così.
Continuo a scavare nel codice e a trovare una funzione nuova che non avevo mai visto, e per capire cosa fa devo studiarla e fare prove, poi scopro che si tratta di una funzione che disegna la mappa e quindi ho perso tempo. Il problema è che queste funzioni sono quasi 400.
E' troppo per una persona sola e alle prime armi come me.
Raul, non hai un amico esperto di assembly in grado di darmi una mano?


--------------------
 
raul
messaggio23 Mar 2024, 23:45
Messaggio #674



Gruppo icone

Gruppo: OldGamer
Messaggi: 2.695
Iscritto il: 15 September 17
Da: España
Utente Nr.: 21.627
SO Sono un BOT, cancellami l'account




Ho amici programmatori, il problema è che non sono interessati a questi giochi, infatti, relativamente di recente, ho parlato con diversi di loro per vedere se potevano aiutarmi a modificare il font delle lettere per Space Crusade e non credo di aver avuto molto successo.

Il problema di tutto questo è che siamo in pochi ad essere interessati a questi giochi classici, comunque non fatevi sopraffare, cercate di sistemare le cose meno difficili e se non ci riuscite nemmeno voi, forse in futuro potrete fare qualcosa, la cosa più importante è che non vi bruciate con questo, ricordatevi che è solo un hobby.

Messaggio modificato da raul il 23 Mar 2024, 23:45
 
TheRuler
messaggio25 Mar 2024, 02:08
Messaggio #675



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
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




Torniamo ai fix facili (mi ha preso un paio d'ore):

CITAZIONE
Il signore degli stregoni può essere colpito dalle magie nella missione 24.
0x1282: 0E -> 1A



Ho trovato il codice che è stato aggiunto per l'espansione e ha un controllo strano.
Prima verifica se si tratta della missione 0F, cunicoli di ghiaccio, poi se si tratta del mostro goblin 0E (non è usato in nessuna missione). Ho sostituito quello 0E con 1A, il witch lord dell'espansione della missione 24.

CODICE
01EF:0E5A  803E923F0F          cmp  byte [3F92],0F         ds:[3F92]=3838        <--- questo controlla il numero di missione (la 0F è cunicoli di ghiaccio!?)
01EF:0E5F  7204                jc   00000E65 ($+4)         (no jmp)
01EF:0E61  3C0E                cmp  al,0E                                        <--- Controlla se il mostro è il GOBLIN non usato.
01EF:0E63  EB06                jmp  short 00000E6B ($+6)   (down)                     va sostituito con 1A (witch lord espansione)
01EF:0E65  FEC0                inc  al
01EF:0E67  24FE                and  al,FE
01EF:0E69  3C0C                cmp  al,0C                                        <--- Controlla se il mostro è il witch lord del gioco base
01EF:0E6B  7512                jne  00000E7F ($+12)        (down)


Mi piacerebbe capire nella missione "i cunicoli di ghiaccio" cosa dovrebbe succede se usassi la magia contro i mostri.
In teoria nulla, forse hanno solo sbagliato ID quando hanno inserito la condizione.


--------------------
 

189 Pagine V  « < 25 26 27 28 29 > » 
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: 2nd November 2026 - 01:31