Benvenuto Visitatore(Log In|Registrati)

> Puzzle-Combinazioni e Schermate
Gabarts
messaggio4 Jun 2014, 10:25
Messaggio #1





Gruppo: Gamer
Messaggi: 29
Iscritto il: 28 May 14
Utente Nr.: 20.437
BGE Indiana Jones and The Last Crusade (Lucasfilm Games-1989)

Playing Broken Sword 5 - La maledizione del serpente
SO Windows7




Non so se sono il primo a postare in questa sezione... comunque spero non sia troppo banale come aiuto blush.gif Sul forum ufficiale Khris si è sempre rivelato di grande aiuto ma spesso spiegare problemi di programmazione in inglese può risultare un po' intricato...

Non sono esperto di scripting avanzato su AGS, probabilmente non esperto neanche di scripting basico, eheh blush.gif Sicuramente qualcuno di voi mi saprà dare consigli diretti per questo tipo di puzzle:

-Il primo è il puzzle classico della combinazione (l'organo di teschi in Last Crusade)

Io faccio 4 o 5 hotspot o oggetti (con hotspot) a cui posso assegnare dei suoni. Poi creo una variabile INT e metto il codice quando carico la Room. Come imposto uno script di questo genere?

-Questo forse è più semplice, ma ahimè sono mesi che non uso AGS e devo ritrovare un po' di dimestichezza. Come faccio a gestire le proprietà visible o transparency di un hotspot, personaggio o oggetti tra le varie schermate. Mi spiego meglio: ho Room_1, Room_2, Room_3 e sono collegate tra loro da porte o simili.

Io sono su Room_3 e assegno al mio personaggio un azione. Alla fine dell'azione voglio che un dato hotspot o oggetto che si trova però in Room_2 diventi visible= true o transparency = 100 etc etc, non ricordo se devo usare _root o altro.
 
 
Start new topic
Risposte
Procione
messaggio8 Oct 2014, 23:17
Messaggio #2





Gruppo: Gamer
Messaggi: 18
Iscritto il: 26 February 14
Utente Nr.: 20.320
SO Windows7




Azzarola mi dispiace aver visto solo adesso questa discussione. Lo script per gestire l'enigma può essere scritto in vari modi in base anche a cosa deve accadere nel gioco dopo la risoluzione di esso.
Per chi fosse ancora interessato ecco come ho risolto prendendo come base il post di Gabarts:

CODICE
// room script file
int code; //Variabile che tiene conto del codice;
bool enigmaRisolto = false; //Variabile che tiene conto se l'enigma è stato risolto o meno;

//Bottone A
function hA_Interact()
{
  if(enigmaRisolto == false) //Se l'enigma non è stato risolto possiamo continuare a cercare di risolverlo...
  {
    cEgo.Walk(140, 220);
    if(code == 2) code++;
    else code = 0;    
  }
  else //...altrimenti se è già stato risolto fa dire la frase ad Ego e non ci fa più accedere all'enigma
  {
    cEgo.Say("L'ho gia' risolto!");  
  }
}

//Bottone B
function hB_Interact()
{
  if(enigmaRisolto == false)
  {
    cEgo.Walk(240, 220);
    if(code == 3) code++;
    else code = 0;
  }
  else
  {
    cEgo.Say("L'ho gia' risolto!");  
  }
}

//Bottone C
function hC_Interact()
{
  if(enigmaRisolto == false)
  {
    cEgo.Walk(340, 220);
    if(code == 0) code++;
    else code = 0;  
  }
  else
  {
    cEgo.Say("L'ho gia' risolto!");
  }
}

//Bottone D
function hD_Interact()
{
  if(enigmaRisolto == false)
  {
    cEgo.Walk(440, 220);
    if(code == 1) code++;
    else code = 0;  
  }
  else
  {
    cEgo.Say("L'ho gia' risolto!");    
  }    
}

function room_RepExec()
{
  if(code == 4){ //Se code è uguale a 4...
    enigmaRisolto = true; //...enigmaRisolto diventa true
    Display("Enigma risolto.");
    
    //code rtorna a 0. Se rimarrebbe 4, dato che questo codice è posto in Repeatedly Execute, le due righe di cui
    //sopra verrebbero continuamente eseguite, il che farebbe continuamente apparire la scritta "Enigma risolto."
    //bloccando il gioco.
    //Settando code a 0, l'if posto in room_RepExec() non verrà più soddisfatto e AGS non ri-eseguirà  enigmaRisolto = true; e  Display("Enigma risolto.");
    //permettendoci così di proseguire il gioco.
    code = 0;
  }
}


Messaggio modificato da Procione il 9 Oct 2014, 22:13
 
Gabarts
messaggio27 Nov 2014, 22:48
Messaggio #3





Gruppo: Gamer
Messaggi: 29
Iscritto il: 28 May 14
Utente Nr.: 20.437
BGE Indiana Jones and The Last Crusade (Lucasfilm Games-1989)

Playing Broken Sword 5 - La maledizione del serpente
SO Windows7




CITAZIONE (Procione @ 9 Oct 2014, 00:17) *
Azzarola mi dispiace aver visto solo adesso questa discussione. Lo script per gestire l'enigma può essere scritto in vari modi in base anche a cosa deve accadere nel gioco dopo la risoluzione di esso.
Per chi fosse ancora interessato ecco come ho risolto prendendo come base il post di Gabarts:

CODICE
// room script file
int code; //Variabile che tiene conto del codice;
bool enigmaRisolto = false; //Variabile che tiene conto se l'enigma è stato risolto o meno;

//Bottone A
function hA_Interact()
{
  if(enigmaRisolto == false) //Se l'enigma non è stato risolto possiamo continuare a cercare di risolverlo...
  {
    cEgo.Walk(140, 220);
    if(code == 2) code++;
    else code = 0;    
  }
  else //...altrimenti se è già stato risolto fa dire la frase ad Ego e non ci fa più accedere all'enigma
  {
    cEgo.Say("L'ho gia' risolto!");  
  }
}

//Bottone B
function hB_Interact()
{
  if(enigmaRisolto == false)
  {
    cEgo.Walk(240, 220);
    if(code == 3) code++;
    else code = 0;
  }
  else
  {
    cEgo.Say("L'ho gia' risolto!");  
  }
}

//Bottone C
function hC_Interact()
{
  if(enigmaRisolto == false)
  {
    cEgo.Walk(340, 220);
    if(code == 0) code++;
    else code = 0;  
  }
  else
  {
    cEgo.Say("L'ho gia' risolto!");
  }
}

//Bottone D
function hD_Interact()
{
  if(enigmaRisolto == false)
  {
    cEgo.Walk(440, 220);
    if(code == 1) code++;
    else code = 0;  
  }
  else
  {
    cEgo.Say("L'ho gia' risolto!");    
  }    
}

function room_RepExec()
{
  if(code == 4){ //Se code è uguale a 4...
    enigmaRisolto = true; //...enigmaRisolto diventa true
    Display("Enigma risolto.");
    
    //code rtorna a 0. Se rimarrebbe 4, dato che questo codice è posto in Repeatedly Execute, le due righe di cui
    //sopra verrebbero continuamente eseguite, il che farebbe continuamente apparire la scritta "Enigma risolto."
    //bloccando il gioco.
    //Settando code a 0, l'if posto in room_RepExec() non verrà più soddisfatto e AGS non ri-eseguirà  enigmaRisolto = true; e  Display("Enigma risolto.");
    //permettendoci così di proseguire il gioco.
    code = 0;
  }
}


Grazie! Scusa se ho letto adesso la tua risposta, navigando tra un forum e l'altro, con cento cose da fare... mi sei stato di grande aiuto. Anche April mi sta aiutando in questo momento... blush.gif Si possono davvero fare tantissime cose se si è abili con la programmazione! Purtroppo io sono negato in questo senso (perlomeno ci arrivo ma per vie traverse, lunghe ed estremamente tortuose, eheh).

Messaggio modificato da Gabarts il 27 Nov 2014, 22:50
 
Gabarts
messaggio27 Nov 2014, 23:10
Messaggio #4





Gruppo: Gamer
Messaggi: 29
Iscritto il: 28 May 14
Utente Nr.: 20.437
BGE Indiana Jones and The Last Crusade (Lucasfilm Games-1989)

Playing Broken Sword 5 - La maledizione del serpente
SO Windows7




Un'altra piccola cosa ma fondamentale riguardo al Puzzle
------------------------------------------------------------------

Riprendendo l'enigma dell'organo in Indy:

c'è uno script dell'animazione della porta che non si apre "solo" dopo 6 note premute, ovvero la sequenza calcolata deve essere 6 tentativi. Come si dichiara questa variabile? Ok code = 0; ma per eseguire l'animazione dell'enigma non risolto (ovvero la porta che non si apre del tutto) solo dopo 6 note?

Spero di essere stato chiaro blush.gif old2.gif
 

Inserisci in questo messaggio


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

 

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


Versione Lo-Fi Oggi è il: 25th October 2020 - 12:48