[Pandora rebirth] Fall to win

Spazio dedicato al linguaggio BennuGD per programmare videogiochi sulle nostre openconsole
Farox
Cavaliere OC.it
Cavaliere OC.it
Posts: 812
Joined: 4 May 2011, 20:48
Console open: GP2X-F200 bianca, Caanoo (bianca),
Pandora (First Batch 256MB RAM) nera,
JXD S7300B nera, Rpi model B
Location: Umbria
Contact:

Re: [Pandora rebirth] Fall to win

Post 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
Image
User avatar
Zip
Site Admin
Posts: 3101
Joined: 3 May 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Location: Sicilia
Contact:

Re: [Pandora rebirth] Fall to win

Post by Zip »

ottimo! appena posso inizio a provare questi nuovi "key" grazie ancora farox, tornando al gioco, nessuno ha consigli da darmi?
User avatar
gigios
Newser OC.it
Newser OC.it
Posts: 851
Joined: 4 May 2011, 9:08
Console open: Wiz; Caanoo
Location: Lombardia

Re: [Pandora rebirth] Fall to win

Post 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.
Image
User avatar
Zip
Site Admin
Posts: 3101
Joined: 3 May 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Location: Sicilia
Contact:

Re: [Pandora rebirth] Fall to win

Post 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")
User avatar
gigios
Newser OC.it
Newser OC.it
Posts: 851
Joined: 4 May 2011, 9:08
Console open: Wiz; Caanoo
Location: Lombardia

Re: [Pandora rebirth] Fall to win

Post 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
Image
User avatar
Zip
Site Admin
Posts: 3101
Joined: 3 May 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Location: Sicilia
Contact:

Re: [Pandora rebirth] Fall to win

Post 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
Attachments
ftw0_031.zip
(3.88 KiB) Downloaded 359 times
User avatar
Zip
Site Admin
Posts: 3101
Joined: 3 May 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Location: Sicilia
Contact:

Re: [Pandora rebirth] Fall to win

Post 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: ;)
Attachments
ftw0_032.zip
(4.29 KiB) Downloaded 366 times
User avatar
RZZ
Moderatore Supremo
Posts: 710
Joined: 4 May 2011, 20:11
Location: Udine

Re: [Pandora rebirth] Fall to win

Post by RZZ »

la velocità è data da y+x
Image
User avatar
gigios
Newser OC.it
Newser OC.it
Posts: 851
Joined: 4 May 2011, 9:08
Console open: Wiz; Caanoo
Location: Lombardia

Re: [Pandora rebirth] Fall to win

Post 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.
Image
User avatar
Zip
Site Admin
Posts: 3101
Joined: 3 May 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Location: Sicilia
Contact:

Re: [Pandora rebirth] Fall to win

Post 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
Post Reply