Page 4 of 17

Re: [Pandora rebirth] Fall to win

Posted: 8 Mar 2012, 0:50
by Farox
Oh Oh Oh sono finito su YTube :mrgreen: peccato che la qualità del video sia immonda...
Cmq si ho visto li messaggio Zip...mi sono messo a vedere se trovavo qualche info sui tasti per pandora e .......cerca cerca ho aperto il modulo Yeti3Dpro (1.96) per Pandora e dentro ci sono degli esempi con i tasti ;)
Dunque ho modificato il bepabute cosi :

Code: Select all

    import "mod_scroll"
    import "mod_key"
    import "mod_file"
    //import "mod_say"
    import "mod_video"
    import "mod_mouse"
    import "mod_map"
    import "mod_rand"
    import "mod_sound"
    import "mod_screen"
    import "mod_math"
    import "mod_draw"
    import "mod_grproc"
    import "mod_wm"
    import "mod_mem"

    #include "jkeys.lib"
    global
    int gfx;
    begin
        set_mode(800,480,16); //RISOLUZIONE
       gfx=load_fpg("\gfx.fpg");
        graph=gfx;
        put_screen(gfx,1);
       
       jkeys_set_default_keys();
        jkeys_controller();

       principale();
        loop
            if(key(_ESC))
              break;
          end
           frame;
        end
        let_me_alone();
    end

    process principale ()
    begin
       selettore();
       loop
       frame;
       end
    end

    process selettore()
    begin
         graph=gfx;
         graph=2;
       
         loop
          if(jkeys_state[_JKEY_UP])
         x=150;y=280;
         end
         if(jkeys_state[_JKEY_DOWN])
         x=150;y=350;
          end
       
         if(jkeys_state[_JKEY_LEFT])
         x=110;y=310;
          end
        
         if(jkeys_state[_JKEY_RIGHT])
         x=190;y=310;
          end
        
         if(key(_PGUP))
         x=650;y=280;
         end
         if(key(_PGDN))
         x=650;y=350;
          end
       
         if(key(_HOME))
         x=610;y=310;
          end
        
         if(key(_END))
         x=690;y=310;
          end
        
        
          frame;
         end
       
       
        let_me_alone();
    end
e funziona...ho solo sistemato i tasti del pandora che non andavano cioe A-B / X-Y .
Ora funzionano sia il Pad che i bottoni ABXY.

Come riferimento dentro gli esempi c'è questo:
// Example by Colombian Developers / GECA soft

// Pandora Mappers:
// ----------------
// Cursors: Cursors
// A: Home
// Y: Page Up
// X: Page Down
// B: End
// L: RShift
// R: Control
// Start: Alt
// Select: Control

Ciao

Re: [Pandora rebirth] Fall to win

Posted: 9 Mar 2012, 18:29
by Zip
ottimo! appena posso inizio a provare questi nuovi "key" grazie ancora farox, tornando al gioco, nessuno ha consigli da darmi?

Re: [Pandora rebirth] Fall to win

Posted: 9 Mar 2012, 18:56
by gigios
Premetto che purtroppo non ho avuto ancora tempo per provare le ultime versioni, ho visto velocemente il video sul tuo canale.

Qualche idea la butto comunque lì:
- Potresti far cambiare velocità di caduta al personaggio in base alla sua 'posizione', se rannicchiato precipita più velocemente, se ha le braccia/gambe aperte allora rallenta la caduta (e quindi va alla velocità attuale).
- Io aggiungerei qualche 'dardo' lanciato da 'cerbottane' piazzate ai lati del pozzo per aumentare la difficoltà.
- Al posto dei dardi potresti invece pensare anche a dei 'nemici' (esempio soldati o mostri) posizionati ogni tanto sui 'muri' solidi, i quali possono spararti frecce x cercare di colpirti.
- A livello di Boss non ho idee, mi sfugge anche il modo con cui poter implementare il tutto visto la dinamica del gioco.

Appena riesco scarico l'ultima versione e guardo la lista dei problemi che hai cercando di darti un po' di supporto per risolverli, se possibile ;)

Ciao.

Re: [Pandora rebirth] Fall to win

Posted: 9 Mar 2012, 19:04
by Zip
grazie gigios,
forse non ricordi ma il personaggio in realta non cade, sono tutti i muri che salgono :)
-quando è rannicchiato il suo spostamento sia verticale che orizzontale è rallentato in modo da costringere a spostarsi a braccia aperte, e non stare sempre appallottolato ;)
-l'appallottolamento dovra durare pochi secondi (non so come implementarlo)
-è fondamentale per fare una figura decente risolvere i bug del muro ghiacciato e i bugs del laser
ad ogni modo vedo di sviluppare se ci riesco dei razzetti o cose simili inteligenti sempre sparati dai muri :/


(piu avanti vado piu la logica del gioco è confusa! ancora non ho capito cosa mettere come "storia")

Re: [Pandora rebirth] Fall to win

Posted: 15 Mar 2012, 11:35
by gigios
Ho dato un occhio veloce al primo bug menzionato nel tuo codice.
Se ho capito bene il problema è che il laser si muove molto lentamente, e questo è causato dall'uso dell'istruzione frame(3000);
Io ho modificato il tuo processo laser per far si che non venga sfruttato frame per simulare il 'toggle' del laser ma uso direttamente un timer con cui lascio il laser acceso o spento per 1 secondo (tempo che puoi variare modificando il codice).
Così facendo il frame l'ho messo alla fine del processo consentendo l'aggiornamento della posizione del laser ad ogni frame (quindi si muove con la velocità impostata tramite la variabile y).

Sostituisci il tuo processo laser con questo:

Code: Select all

//--------------------------------------------##LASER
process laser(x,y)
private
	int startTimer;
	int currentTimer;
begin
    vitalaser=5;
    walls=walls+1;
	startTimer=get_timer();										//Memorizza timer iniziale x accendere/spegnere il laser a intervalli regolari
    loop
		y=y-2;													//Definisce la velocità di 'scroll' del laser
		currentTimer=get_timer();
		if(laserspento==0)
			if((currentTimer-startTimer)<1000)					//se sono passati meno di 1 secondo, laser on
				graph=51;
			elseif((currentTimer-startTimer)<2000)				//Se sono passati meno di 2 secondi, laser off
				graph=50;
			else												//se le condizioni sopra non sono soddisfatte, resetta il timer per riprendere il ciclo
				graph=50;
				startTimer=get_timer();
			end
		else
			graph=50;
			alpha=500;
		end

		if(y<1) walls=walls-1; score=score+50; break; end       //se superi il bordo superiore muori
		if(vitalaser<1)  laserspento=1;end
	   
		frame;
    end
end
Appena avrò un ulteriore momento di pausa sul lavoro, provo ad indagare sui punti successivi!

Edit:
Ho dato un occhio veloce anche al secondo bug, quello relativo al ghiaccio!
Sinceramente faccio fatica a capire come dovrebbe funzionare e, quindi, provo a descrivere quello che credo sia il comportamento che 'dovrebbe' avere la gestione del ghiaccio.
- Il giocatore preme C e viene di conseguenza sparato un 'fiocco'
- Alla collisione con un muro, quest'ultimo si ghiaccia permettendo al personaggio di attraversarlo se 'rannicchiato'.
- Solo il muro colpito dal fiocco deve comportarsi come muro ghiacciato, tutti gli altri continuano a comportarsi normalmente.

Se questa mia 'descrizione' del comportamento è corretta, penso anche d'aver trovato il problema, ovvero la variabile 'ghiaccio' è definita a livello globale, quindi tutti i muri visibili si comportano come se fossero ghiacciati quando la variabile è a 1.
Per il fiocco che non sempre sembra funzionare, il problema è molto più semplice.
Praticamente nel processo fiocco tu 'distruggi' il processo con break se è in collisione con il muro. Il problema è che non viene chiamata la funzione frame prima di terminare il processo.
Modifica l'if nel seguente modo e i muri dovrebbero ghiacciarsi sempre al contatto con il fiocco (questa correzione non risolve il problema della variabile ghiaccio!!!).

Codice originale da modificare:

Code: Select all

	if (collision (type muro) && ghiaccio==1) break; end
Codice corretto:

Code: Select all

		if (collision (type muro) && ghiaccio==1) 
			frame;
			break;
		end

Re: [Pandora rebirth] Fall to win

Posted: 15 Mar 2012, 18:06
by Zip
Allora grazie gigios,
per il laser hai risolto perfettamente il problema, complimenti

premettendo che hai capito esattamente come si devono comportare i muri
hai sistemato che i fiocchi "ghiacciano" sempre , ma in realta come dicevi,
resta il problema della variabile globale.. cosa potrei inventarmi!?
grazie di nuovo

allego il file con le modifiche da te consigliate per farti capire (a tutti) che problema resta ovvero che c'e la variabile ghiaccio in condivisione di tutti i muri

@RZZ ora guardo anche il file che i hai mandato via email e ti faccio sapere grazie

Re: [Pandora rebirth] Fall to win

Posted: 15 Mar 2012, 18:36
by Zip
ecco qui aggiunte le modifiche sia di giogios che di rzz,
anche se in realta "marco" dovrebbe fare questo come appallottolamento

se premi spazio si appallottola e resta appallotolato fino a quando non si lascia lo spazio
-----se superi i 3 sec si spallottola e bisogna ripremere per riappallottolarsi

per come ha impostato rzz (quindi come è ora) è:

premi spazio
si appallottola per 3 sec e si spallottola

se tieni premuto spazio resta sempre appallottolato


per quanto riguarda il laser ho lasciato per ora per velocita la modifica di rzz, anche se è troppo veloce ma si puo sistemare, con calma la studio meglio,

quindi come leggete in questo sorgente restano solo 2 bug + sistemare marco
grazie mille come sempre :pandora: ;)

Re: [Pandora rebirth] Fall to win

Posted: 15 Mar 2012, 18:54
by RZZ
la velocità è data da y+x

Re: [Pandora rebirth] Fall to win

Posted: 15 Mar 2012, 19:05
by gigios
Per la velocità di 'toggle' dello stato del laser basta aumentare i 150 ms usati per alternare le animazioni.
Praticamente, come è ora, cambia animazione ogni 150 millisecondi, puoi aumentare questo valore, ad esempio, mettendolo a mezzo secondo impostando l'if in questo modo:

Code: Select all

if (get_timer()-timeanim>500)
Per le collisioni, e quindi il problema della variabile globale, non saprei come agire, o meglio, non sono sicuro sia il metodo corretto (non ho ancora provato a gestire collisioni in bennu, a dir la verità ho fatto veramente poco con bennu e forse è RZZ il più esperto qui nel forum).
Le possibilità che mi vengono in mente sono due.

1. Avere a livello globale una lista di tutti i muri, lista composta da una struttura in cui è presente il tipo di muro, l'ID del processo, lo stato (es. ghiacciato), ed eventuali informazioni che possono servire. Durante il check della collisione, si dovrebbe vedere in questa lista se il muro ha lo stato impostato a ghiacciato oppure no.

2. La seconda soluzione non so se è applicabile (ripeto, non sono un esperto nell'uso di processi in bennu).
Praticamente lascerei la gestione della collisione con il personaggio direttamente all'interno del processo muro (quindi sarebbe da togliere dal processo del personaggio). Così facendo sarebbe semplice avere una variabile locale che tiene traccia se il muro è ghiacciato o no e, in caso di collisione con il personaggio, il processo del muro dovrebbe togliergli una vita se non è appallottolato, ovviamente la variabile che indica lo stato del personaggio dovrà rimanere globale.

Re: [Pandora rebirth] Fall to win

Posted: 15 Mar 2012, 19:40
by Zip
allora prendendo in considerazione la prima delle tue opzioni si potrebbe fare:
un contamuri di cemento GLOBALE
e una variabile privata che prenda il valore dell'ultimo muro creato dal contamuri

e poi? mi sono confuso