Ready64 Forum
Commodore 64 => Programmazione, Grafica e Musica => Topic aperto da: ice00 - 22 Gennaio 2006, 19:19:33
-
Dato che la minigame sta per partire con 1K, 4K e 8K e la durata sarà differenziata (2, 6 e 8 mesi), inizio subito il nuovo progetto.
1K è fuori portata perchè i prossimi mesi sono già full con le altre attività in corso, 8KB è troppo grande, rimane dunque 4KB.
Il gioco si chiama ELAV ed è un remake di Rampage.
Tecnicamente è abbastanza intricato, perchè i palazzi da abbattere sono uno dietro all'altro, la grafica richiede abbastanza sprites per il mostro, inolte prevedo elicotteri (sprite) e carroarmati (sprite) che sparano (char).
Per rendere il gioco giocabile, penso di mettere un tempo limite per abbattere i palazzi: scaduto quello si viene catturati e il gioco finisce.
Si hanno a disposizione diverse vite, ma se si viene colpiti, si perde una vita (a vite terminate si termina il gioco).
Pertanto bisogna tatticamente andare ad abbattere elicotteri/carrormati che si preparano a sparare (prevedo che ci si accorga dello sparo imminente per cambio proprietà del nemico), perdendo prezioso tempo per abbattere i palazzi.
Questo dovrebbe garantire la giocabilità (che in rampage originale più in là del 3 livello non sono mai andato).
I livelli devono partire da pochi palazzi e aumentarne il numero più in là che si sale.
Mi picerebbe avere un algoritmo random di generazione e memorizzare solo il seme (quindi un livello=1 byte) in modo da poter scegliere i livelli migliori e memorizzarli solo quelli in una tabella di 25 livelli (ammesso che si generi 1 livello buono su 10).
Ovviamente a questo stadio è un pò prematuro ciò, perchè molto dipenderà dall'implementazione dei palazzi sovrapposti.
Intanto ecco qui alcuni screen shot di quello prodotto fino ad oggi usando l'editor di LSS2.
Si tratta della città in sottofondo che usa 12 caratteri monocolore.
In primo piano la strada e l'erba (le dimensioni non sono quelle definitive dato che in LSS2 si usano 20 caratteri mentre qui si andrà sui 23
Seguite questo link per vedere l'immagine (http://digilander.iol.it/ice00/download/elav1.png)
[modificato tag IMG in link, per evitare che l'immagine - larga oltre 900 pixel - faccia scompagnare il layout del forum - eregil]
-
Dopo una settimana di lavoro, il background è pronto e il gorilla, dopo molte prove, sta prendendo forma. Presto posterò i sorgenti.
(http://digilander.iol.it/ice00/download/elav2.png)
-
Dopo una settimana di lavoro, il background è pronto e il gorilla, dopo molte prove, sta prendendo forma. Presto posterò i sorgenti.
(http://digilander.iol.it/ice00/download/elav2.png)
Bello :mavieni:
-
Questo è il gorilla nella animazione di 1 passo completo (3 frame): è composto da 2 sprite (alto basso) e la parte bassa usa 2 sprite diversi per l'animazione camminata..
Un terzo sprite attivo sarà necessario per quando il gorilla da il pugno.
(http://digilander.iol.it/ice00/download/elav3.gif)
-
Lo sfondo mi sembra bellissimo... ed anche lo scimmione non scherza... :hail:
-
Ice00,quanto tempo hai per programmare il tutto?
-
Si parla di 5 mesi di tempo da quando partirà la competizione (che sembrava dovesse partire a febbraio) per la categorai 4KB.
-
I sorgenti si trovano qui: Sorgenti (http://digilander.iol.it/ice00/download/elav_.zip)
Sto inserendo la parte di codice da Ann-Gong e LSS che tornerà utile in questo game.
-
coplimenti ice, stai facendo davvero un ottimo lavoro :)
-
Decisa la rappresentazione dei livelli: ogni livello con K edifici è descritto con K+1 bytes, quindi con 20 livelli l'occupazione di memoria è sui 100 bytes avendo una media di 5 edifici da abbattere.
L'edificio è caratterizzato da: posizione davanti/dietro (nell'originale c'erano più livelli di avanti/dietro), tipo di edificio (max 8), posizione dal punto 0 se il primo, dall'ultimo edificio inserito per gli altri.
Adesso devo creare le routine che disegnano i palazzi in base alle mappe: saranno usati 4 buffer: char/color posizione davanti, char/color posizione dietro.
Ad ogni disegno dello schermo, i due buffer vengono fusi rispettando le priorità, tenendo conto anche che c'è uno sfondo fisso.
Questa è l'unica rappresentazione in memoria che mi sembra semplice per gestire il tutto.
-
Anche se adesso non si vede (perchè non ci son i palazzi), e già implementata la fusione dei 3 schermi in base alla priorità.
Il tutto avviene ad ogni frame. Quindi presto si potrà vedere la mappa coi palazzi.
Rimane un grosso problema: dopo 4 secondi, non avviene più l'interrupt. Il che è strano, perchè il codice è quello copiato dagli altri game dove funzionava benissimo.
-
Adesso la mappa di un livello viene scompattata in un formato che permetterà la gestione (quindi ci sono le dimensioni x/y del palazzo, la posizione assoluta, ecc).
Manca adesso solo disegnare il palazzo e questo sarà quello che spero di fare domani.
-
EDIT: Ehm, visto che ho risposto per sbaglio a questo post con il testo di quello che ho mandato in reply al tapmanager, tanto vale che ne approfitti e ti faccia i complimenti per come stai portando avanti il lavoro ;)
-
Ecco, qua il primo livello col generatore di livelli completato
(http://digilander.iol.it/ice00/download//elav4.png)
-
Aggiunti 8 livelli e la prima fase dell'animazione caduta dei grattaceli. Se riesco a breve ho l'animazione completa
-
Adesso i palazzi cominciano a cadere, solo che il codice non è funzionante al 100%, perchè cade solo un palazzo e un piccolo pezzo. Sicuramente qualcosa nella routine è sbalgiato e provoca ciò
-
Ciao Ice,
volevo farti i miei complimenti per il lavoro ed augurarti in bocca al lupo per la competizione :metallica: . Mi fà sempre piacere vedere nuovi prodotti per il c64.. il sogno continua!
Ciao :ciauz:
-
Molto bello!
Complimenti davvero.
-
Grazie a tutti!
Adesso i palazzi cadono perfettamente (il problema era di temporizzazione). Rimane da sistemare l'algoritmo che mette l'erba che risulta un pò farlocco al momento
-
Che ideona, mannaggiamannaggia! :lol:
-
Pur rimanendo il problema dell'erba, adesso si passa di livello appena cadono tutti i palazzi, dato che è implementato il passaggi odi livello.
In questo modo si riesce a testare tutti gli 8 livelli.
C'è pure un alotr bug: il timer passa a 22 secondi appena si da il bonus e ciò non dovrebbe accadere.
-
il timer passa a 22 secondi appena si da il bonus e ciò non dovrebbe accadere.
Stai usando 2 locazioni in zp che il basic sovrascrive con $22 ogni volta che esegui la $AB1E
(vedi mapping the c64/aay64)
Jump from $AABF, $AB1E, $AEC6, $B473:
B487: A2 22 LDX #$22
B489: 86 07 STX $07 ; Temporary Integer during OR/AND
B48B: 86 08 STX $08 ; Flag: Scan for Quote at end of String
usando altre locazioni tipo:
time = $fb ; time counter
lifes = $fc ; number of lifes (9 max)
sembra funzionare
ps: LIVES!!! non lifes ;)
-
Ecco svelato l'arcano. Thanks.
Di solito cerco di utilizzare locazioni ormai collaudate che non sono rimaneggiate, ma qui ne sto usando parecchie di più del solito
-
Il prolema dell'erba era proprio banale. Io rimettevo l'erba in primo piano, ma è sbagliato: l'erba è già presente sullo sfondo, bastava mettere il carattere null per risolvere.
Così facendo ho tolto anche codice inutile per inserire il colore
Adesso devo passare alla gestione movimenti gorilla e disegnare gli prites di quando è arrampiacato
-
Cominciano ad apparire le animazioni del movimento avanti indietro (al restart non sono attualmente resettate).
Nel frattempo ho disegnato anche lo sprite di qunado il gorilla è appeso al palazzo.
Il prossimo passo, infatti, è di farlo salire sui palazzi.
-
Inseriti i movimenti e animazioni di salita, caduta (pertanto temporaneamente inibita la caduta palazzi)
Noterete che si aggrappa solo in 2 palazzi (devo cercare di conciliare il movimento e il punto di lettura contatto in modo che valga sempre, senza complicare la routine di rilevazione collisioni).
Allo stato attuale si aggrappa pure a 2 finistre intermedie.
Noterete pure un cursore di debug lampeggiante: serve per vedere il punto in cui cerca il carattere per le collisioni.
-
I sorgenti di elav sono adesso in questa posizione:
http://utenti.lycos.it/ice00/test/elav_.zip (http://utenti.lycos.it/ice00/test/elav_.zip)
Adesso potete dare i pughi e rovinare i palazzi: muovere a dx o sx per colpire il muro, fire+dx, fire+sx per colpire le finestre.
I palazzi non cadono (questo sarà il prossimo passo), ma almeno si ha un'idea del gioco.
Al palazzo si sale con up: al momento se non si è giusti in linea col palazzo, ho fatto animazione che se si è un carattere prima, kong si sposta e poi sale.
Forse servirebbe anche se è un passo oltre il palazzo e indietreggi (lo riservo per vedere quanto spazio resta alla fine).
Ho visto he il carattere che adesso c'è per il muro rovinato, forse è troppo spurio e il gorilla alla fine sembra appeso nel vuoto. Attendo vostri commenti, in caso lo faccio più pieno
-
ciao ice, complimenti per il tuo lavoro, promette davvero bene... lo sfondo in particolare è azzeccatissimo e riesce a creare la giusta atmosfera "metropolitana"... il gorilla si muove e trova il punto di salita con precisione... bello davvero
un consiglio, per quello che puo' valere, è di prevedere che il gorilla quando cammina sposti lievemente la testa o la parte alta del corpo, in questo modo credo risulterebbe meno "ingessato"...
Ho visto he il carattere che adesso c'è per il muro rovinato, forse è troppo spurio e il gorilla alla fine sembra appeso nel vuoto. Attendo vostri commenti, in caso lo faccio più pieno
si', sembra davvero appeso nel vuoto, qualche pixel in piu' non guasterebbe :)
buon proseguimento, attendo gli sviluppi con ansia :)
-
Purtroppo per quanto riguarda il movimento della testa, questo mi porterebbe via altro codice che solo eventualemente alla fine posso tentare di mettere. Ad esempio mi piacerebbe pure che quando sale ci sia un movimento anche laterale per dare l'idea di arrampicata.
Considerando che: se si abbatte solo palazzi senza nemici il gioco diventa monotono, pensavo (abbandoana l'idea del carroarmato che occuperebbe troppo), a delle pallottole vaganti sparate all'eseterno dello schermo. appena si spara si vedrebbe il bordo colorarsi di giallo (dallo scoppio) e poi la pallottola arrivare. Questo implicherebbe un certo rischio quando si è vicini al bordo ad abbattere i palazzi e darebbe quel tocco di giocabilità.
Intanto ho già abbozzato il carattere più pieno ma lo metto in linea appena aggiungo altro codice (e la caduta palazzi)
-
come non detto: già aggiornati i sorgenti.
Il carattere del danno adesso è forse troppo pieno, al limite lo alleggerisco.
Adesso i palazzi cadono, però non c'è ancora la scelta giusta, ovvero se andate ad abbattere l'ultimo cadrà il primo della mappa (per capirci).
Quello che serve è la caduta automatica di kong appena il palazzo cade e la non possibilità di arrampicarsi finchè il palazzo non è caduto.
Ho notato che purtroppo c'è ancora un baco dopo la caduta di un palazzo in primo piano: l'erba appare al posto del palazzo in sottofondo.
Eppure quello sembrava una cosa risolta, perchè il trucco era di cancellare i caratteri (e non mettere l'erba): la priorità faceva il resto.
-
come non detto: già aggiornati i sorgenti.
Ovvero la prova che quando ci sono entusiasmo e piacere ad accompagnare un'attività, è difficile non fare subito ciò che si potrebbe invece fare in seguito. :)
Complimenti veri per il tuo lavoro.
-
corretto l'errore dell'erba: era un bne al posto di beq (prina c'era un valore <>0, poi ho usato lo zero seza inverire la condizione). Ho natato che dopo che cade il palazzo centrale non riesco più a colpire il palazzo più a destra sul lato destro.
Spero sia solo un effetto spurio al fatto che manca la rilavazione effettiva palazzo colpito
-
Insetita una test tune di Nata. Questa è la 2°, la 1° era fatta usando al minimo gli strumenti, ma visto il grado di compressione abbiamo tentato una versione molto più completa.
Il file compresso inserendo la musica era di 3922, adesso è di 3856, ottenuto usando l'utility TINY e togliendo il salto che è messo di default in cima alla tune, perchè inutile (ci salto direttamente io al punto giusto!!).
Purtroppo siamo al limite perchè mancano (ordine con cui eseguirò il coding):
1) quando cade il palazzo il gorilla deve cadere e non salire più
2) quando si va a destra fuori schermo, o si compare all'inizio, o si deve bloccare (adesso ricompare col bug posizione raster alto)
3) manca la parte di monitoraggio palazzo che sta venendo colpito (è indispensabile e occuperà spazio di sicuro)
4) pallottola sparata casualemente a sx e dx e che fa perdere 1 vita se colpito il gorilla
5) in caso di vittoria mettere almeno il messaggio win
6) correggere i bug si quello che il 3° palazzo del primo schema non si riesci più ad abbattere dopo che sono caduti gli altri 2 è preoccupante.
Se nel frattempo qualcuno ha qualche idea per tolgiere 100 bytes in 1 colpo... :)
-
14 bytes si possono rispoarmiare usando il nuovo exomizer 2.x beta 4.
Sebbene comprima solo 3 byte in meno, il decruncher è più piccolo e 14 bytes fanno comodo.
Inoltre è nettamente più veloce a compattare.
Direi che è tempo di mettere da parte la versione 1.x
Nello zip c'è pure la musica del preview 1 (formato sid): dite il vostro parere su quale musica vi piace di più che eventualmente ci si concentra su quella
-
Il punto 1 è stato risolto con 2 istruzioni (lda/sta) quindi a costo minimo.
Il trucco e mantenere il gorilla in caduta finchè tutto il palazzo è caduto.
Penso che ci possa stare: basterà dare un pò di enfasi alla storia (ovvero informare gli utenti che la cosa è voluta :) per dare il senso di stordimento dovuta alla caduta non preventivata..)
-
Ti posto un paio di differenze per tirar via un po' di bytes.
--- elav.s Sun Jul 09 21:47:46 2006
+++ C:\Q\elav\x\elav.s Sun Jul 09 21:47:48 2006
@@ -164 +164 @@
- org 2049
+ org $801
@@ -166 +166 @@
- jsr $2d0e
+;jsr $2d0e
@@ -193,0 +194 @@
+ jsr $2d0e
@@ -243 +244 @@
- ;lda #$18
+ ;ld
@@ -256 +257,2 @@
- jsr clearBuffer ; clean screen buffers
+ ;jsr clearBuffer ; clean screen buffers
+ jsr emptyScreen ; clean screen buffers
@@ -354,0 +357 @@
+Z = * +1
@@ -356 +359 @@
- ldy Z
+ ldy #00
@@ -362,2 +365,2 @@
-Z:
- .byte $00
+;Z:
+;.byte $00
@@ -630 +633 @@
-=================================
+;=================================
@@ -1267,2 +1270,2 @@
- ldx #1
- stx $d019 ; acknowledge the raster interrupt
+ ;ldx #1
+ asl $d019 ; acknowledge the raster interrupt
@@ -1295 +1298 @@
- beq exit_
+ ;beq exit_
@@ -1309 +1311,2 @@
- lda #0
+ ;lda #0
+ tya
@@ -1317 +1320 @@
- beq exit2_
+ ;beq exit2_
@@ -1481,22 +1482,0 @@
-; Clear the memory buffers for
-; screen chars and colors
-;================================
-clearBuffer:
-
- ldx #$0F
-lup:
- lda #0
- ldy #0
-lpc:
- sta $c000,y
-
- dey
- bne lpc
-
- inc lpc+2
- dex
- bpl lup
- rts
-
-
-;================================
@@ -1595 +1575,2 @@
- lda hiLevel,x
+ ;lda hiLevel,x
+ lda #>level1
@@ -2248,9 +2229,9 @@
-hiLevel:
- .byte #>level1
- .byte #>level2
- .byte #>level3
- .byte #>level4
- .byte #>level5
- .byte #>level6
- .byte #>level7
- .byte #>level8
+;hiLevel:
+ ;.byte #>level1
+ ;.byte #>level2
+ ;.byte #>level3
+ ;.byte #>level4
+ ;.byte #>level5
+ ;.byte #>level6
+ ;.byte #>level7
+ ;.byte #>level8
Ottengo 3823bytes.
Il piu' grosso e' dovuto all'eliminazione della clearBuffer, duplicato della empyScreen, l'eliminazione della hiLevel purtroppo fa guadaganare solo 3 bytes =)
Lo spostamento della sid init non e' necessario, volevo solo provare una cosa rivelatasi inutile, ho anche provato a cambiare l'org da $0801 a $0800/$0810 ma non cambia un granche'.
PS: exomizer rulla eh? :)
-
Wow, più veloce della luce :mattsid:
-
A quanto pare siamo gli unici a cui della partita non importa una beata fava :)
-
beh, ho la tv sopra il monitor.... 2 piccioni con 1 fava... :c64:
-
...tre,mi fa piacere che abbia vinto l'Italia ma non ci perdo il sonno :D
-
iAN, pui fare un diff con la versione attuale inserita in dowload e quella tua con le modifiche?
Ho applicato le modifiche (purtroppo a mano, perchè patch andava in blocco) e adesso quando cade un palazzo: o si resetta lo schermo, o c'è un istruzione illegale, o io kong non si muove più come dovrebbe.
Non so se ho sbagliato a inserire la patch, oppure ci sia un problema in exomizer che si mangia un pò di codice.
-
iAN, pui fare un diff con la versione attuale inserita in dowload e quella tua con le modifiche?
Mah... nun zo... ci penso...
:lol:
Eccolo, cappella mia.
;=================================
; Get a random number
; routine in publication magazine
;=================================
random:
inc Z
Z = * +1
ldy #00
lda $DC04
eor $FEDC,y
eor $D012
rts
Z deve puntare al valore della ldy #, modificandolo in loco.
-
risolto il punto 2 con due AND: adesso il moviemento è a circolo se si esce dallo schermo, mi sembra che pure il gioco originale sia così. Adesso devo passare al punto più impegnativo!
-
Mentre stavo implementando il punto 3, ho trovato il baco che non permetteva al 3° palazzo di essere colpito dopo che il primo cadeva.
La conseguenza è che ora potete abbattere tutti i palazzi e passare i livelli (attenzione, abbattete sempre prima i palazzi più a sinistra), altrmenti cadrà quello sbagliato)
Ho visto che fino all'ultimo livello si può abbattere entro i 99 secondi (anche se risicati), l'ultimo è troppo complicato per riuscirci.
Penso che se il tempo va a 0, dovrebbe ripartire da 99, ma tolgiendo 1 vita.
-
Ho fatto una modifica parziale per il punto 3: sembra che funzioni già così al 90% (solo in un caso un palazzo sottostante viene erroneamente colpito nelle finestre), ma questo non pregiudica la caduta degli altri.
Provate a giocare e andare ad abbattere i palzazzi usando un ordine casuale per vedere se alla fine riuscite ad abbatterli tutti.
La modiifca che servirebbe peressere al 100% non richiede tantissime istruzioni, ma mi riservo di farlo solo se strettamente necessario, per risparmiare bytes che possono essere preziosi per le altre cose da aggiungere.
-
Dopo la distruzione di un palazzo , l'unico modo per far muovere ancora il gorilla e' quello di muoversi in giu' o nella direzione opposta in cui e' girato.
makeDestroy:
lda delay
sta temp6
lda #0
sta anim ; suppose no anim
ldy tBuild ; read total buildings
testB:
lda B_DEC-1,y
bne goNextB
; the building have to fall down
lda B_VIS-1,y
bmi activeB
goNextB:
dey
bpl testB
;;;;;;;;;;;; iAN CooG/HokutoForce
lda anim
beq nostate
jsr moveDn
nostate
;;;;;;;;;;;; iAN CooG/HokutoForce
rts
Exomizzato aggiunge 4 bytes, 3854 in tutto, ma rende piu' gestibile la cosa...
Tienilo remmato nel sorgente, da attivare solo se avanza veramente spazio =)
-
La buona notizia è che ora è implementato tutto tranne la pallottola casuale, il che significa: punteggi, perdita vita col tempo, game over e winning screen.
Quella meno buona è che rimangono solamente 182 bytes: un pò pochetto per quello che manca, ma bisognerà cercare di spremere ogni singolo bytes.
Domani purtroppo ho 5h di blackout energia elettrica e poi per una settimana sarò via, vediamo quello che rieso a fare (spero almeno di inserire il codice di Ian, infatti ho notato pure io l'inconveniente gorilla e la soluzione di Ian consuma pochi bytes, quindi sarebbe auspicabile inserirla)
-
Al limite si puo' sempre far ridurre la musica, o usarne una meno impegnativa.
Divagazione: dopo aver applicato la patch all'ultima versione, ci ho giocato...
http://iancoog.altervista.org/hid/elav-I_wins!1.rar (http://iancoog.altervista.org/hid/elav-I_wins!1.rar)
e finito con una vita, quasi sempre risicando all'ultimo secondo! E dire che fino a stasera non avevo ancora capito come giocare. :lol:
-
La corrente sembra non sia stato tolta, speriamo che non sparisca di botto!!
In teoria io ero preoccupato che ce la facevo perdendo solo 1 vita all'ultimo livello!
Implementando lo sparo, dovrebbe risultare una cosa difficile da vincere, il che lo renderebbe giocabile!!
-
Diciamo che le cose sembrano andare bene, perchè adesso, con ancora 100 bytes a disposizione, si comincia a vedere l'effetto dello sparo.
Si illumina lo schermo di giallo, poi la pallottola parte random in direzione sx o dx.
Lo sparo avviene solo quando il gorilla è appeso ad un palazzo, dato che la posizione y della pallottola coincide con quella del gorilla.
Adesso lo sparo riparte subito dopo che 1 è finito, ma bisognerà inserire un delay random.
Appena inserita la gestione collisione, che dovrebbe occupare poco in termini di spazio, il gioco potrebbe cosiderarsi finito.
Comunque sto aspettando uno step ulteriore da nata sulla musica, casomai se rimangono bytes, potrei ipotizzare di avere più pallottole sparate in contemporanea, se sarà il caso.
-
Adesso c'è la collisione. Provate a giocare così e vedete a che livvello arrivate.
Manca delay sparo casuale che dovrebbe rendere il gioco più abbordabile e interessante.
-
Stavo prendendo il file dal link su digilander, quindi riposto il link giusto per non far incorrere altri nello stesso sbaglio :)
http://utenti.lycos.it/ice00/test/elav_.zip (http://utenti.lycos.it/ice00/test/elav_.zip)
-
Adesso c'è la collisione. Provate a giocare così e vedete a che livvello arrivate.
Manca delay sparo casuale che dovrebbe rendere il gioco più abbordabile e interessante.
E' TROPPO difficile =)
Il delay dello sparo e' d'obbligo, e suggerirei anche di controllare la pos del gorilla, se troppo a destra non dovrebbe sparare da destra, cosi' come a sinistra. Si perdono vite anche 4-5 alla volta senza possibilita' di difendersi :P
Sono riuscito a finire solo il 2o livello dopodiche' mi hanno colpito proprio mentre aspettavo che finisse l'animazione del palazzo che crolla *groan*
Ad ogni modo e' pressoche' finito, quasi rilasciabile ;)
-
4016 bytes.
Correto un bug: se si moriva mentre si cadeva, il moto continuava alla ripartenza.
Messo che probabilisticamente solo 5 volte su 255 il proiettile parte in un frame.
Inoltre se si è più a sinistra di 50 pixel, si spara a destra. A destra non c'è nessun controllo, anche perchè qui il proiettile impega più tempo ad apparire e uno potrebbe avere il tempo di allontanarsi.
Sotto con le prove...
p.s.
forse conviene pulire lo schermo quando si mette game over perchè colpiti e si è senza vite?
-
Correto un bug: se si moriva mentre si cadeva, il moto continuava alla ripartenza.
Era proprio il bug che mi accingevo or ora a segnalarti. :lol:
Inoltre mi è capitato di finire la partita,premere per rigiocare e ritrovarmi subito dopo con un altro GAME-OVER. :huh:
Il mio top da mediocre giocatore:2o livello con un palazzo abbattuto,ma ho giocato poche partite :)
Complimenti davvero:continua(te) così
-
Dopo che e' apparso un proiettile, se si prova ad uscire dal bordo a sx si muore continuamente. C'e' forse uno sprite proiettile sempre alla coordinata x=0, nascosto dal bordo ma attivo?
Poi, il proiettile riparte subito appena si viene colpiti. Un po' di tregua, cribbio :D
forse conviene pulire lo schermo quando si mette game over perchè colpiti e si è senza vite?
Di sicuro c'e' un problema. Ho finito al 3o livello, e anziche' ricominciare dal primo, SEMBRA ripartire dallo stesso. Forse si, e' meglio ripulire lo schermo, o al game over o alla ripartenza, fai tu.
-
C'e' forse uno sprite proiettile sempre alla coordinata x=0, nascosto dal bordo ma attivo?
si il proiettile è sempre alla posizione 0, forse basta che lo riposizioni in alto per evitare morte improvvisa
-
[pedantic mode on]
=================================
moveUp:
manca ancora il ; prima della riga di ===
:lol:
-
si il proiettile è sempre alla posizione 0, forse basta che lo riposizioni in alto per evitare morte improvvisa
fixato al volo (EDIT: e rivisto dopo alcuni controlli)
insertEnemy:
lda xActSpeed+4 ; exit if fire is already on
bne exitIE
lda yAct+2 ; skip fire if kong is not climbed
cmp #POS_STY2
beq exitIE2
[..omissis..]
lda #ACT_FIRE
sta actType+4
rts
exitIE2:
lda #$ff
sta yAct+4
exitIE:
rts
Ho dovuto invertire i primi 2 controlli perche' altrimenti il proiettile "sparisce" appena si scende dal palazzo. in effetti cio' potrebbe tornare utile per evitare di morire durante l'animazione del palazzo che crolla... *wink* *wink* :D
Per quanto riguarda questa parte:
[..omissis..]
turn:
;ldy #$fc
ldy #$00 ; default: don't shoot!
skipTurn:
La ldy #$00 e' necessaria se vuoi che non spari quando si e' tutto a dx e sx, ma sono POCO sicuro se era quello che intendevi fare. Da quel che ho capito dovrebbe stare a 0 per non sparare, 4 per sparare da SX e $fc per sparare da DX. Ora credo che vada riscritta la parte per gestirla meglio, magari con una tabella, tipo una cosa cosi':
jsr random
and #$01
tay
lda xacttbl,y
sta xActSpeed+4
xacttbl BYTE $04,$FC
e poi controllando se si e' troppo a sx mettere $fc fisso, se si e' a dx mettere 4 fisso... dici che si complica?
Per quanto riguarda l'eliminazione del proiettile durante il crollo...
;;;;;;;;;;;; iAN CooG/HokutoForce
lda anim
beq nostate
jsr exitIE2
jsr moveDn
nostate
;;;;;;;;;;;; iAN CooG/HokutoForce
che ne dici, l'accendiamo?
-
Ecco la mia proposta di modifica
insertEnemy:
lda xActSpeed+4 ; exit if fire is already on
bne exitIE
lda yAct+2 ; skip fire if kong is not climbed
cmp #POS_STY2
beq exitIE2
jsr random
cmp #$40 ; gimme a f*king break! =)
bcc exitIE
bmi exitIE
and #$01 ; give positive or negative velocity at random
tay
lda xActLo+2 ; don't fire at sx if too near at sx
cmp #50
bcs dontforcedx
ldy #1
dontforcedx
lda xActHi+2
and #$01
beq dontforcesx
ldy #0
dontforcesx
lda xacttbl,y
sta xActSpeed+4
;lda #7 ; give a "fire" at screen
;sta 53280
lda #0
sta xActLo+4
sta xActHi+4
lda yAct+2 ; use same y location of kong
sta yAct+4
lda #ACT_FIRE
sta actType+4
rts
exitIE2:
lda #$ff
sta yAct+4
exitIE:
rts
xacttbl byte $04,$fc
e il diff con tutte le mie modifiche all'ultimo sorgente
--- elav.s Mon Jul 31 11:07:28 2006
+++ C:\Q\elav\x\elav12_mod.s Mon Jul 31 11:07:22 2006
@@ -223 +223 @@
- ;stx 53280
+ stx 53280
@@ -428,3 +426,0 @@
- lda yAct+2 ; skip fire if kong is not climbed
- cmp #POS_STY2
- beq exitIE
@@ -434,0 +431,5 @@
+ lda yAct+2 ; skip fire if kong is not climbed
+ cmp #POS_STY2
+ beq exitIE2
+
+
@@ -436,9 +437,3 @@
- and #$01
- bne turn ; give positive or negative velocity at random
- ldy #4
- bne skipTurn
-turn:
- ldy #$fc
-skipTurn:
- cmp #$05
- bcs exitIE
+ cmp #$40 ; gimme a f*king break! =)
+ bcc exitIE
+ bmi exitIE
@@ -445,0 +441,2 @@
+ and #$01 ; give positive or negative velocity at random
+ tay
@@ -449,2 +446,3 @@
- bcs skipInv
-
+ bcs dontforcedx
+ ldy #1
+dontforcedx
@@ -453 +451 @@
- bne skipInv
+ beq dontforcesx
@@ -455,6 +453,6 @@
- ldy #$fc
-skipInv:
- sty xActSpeed+4
-
- lda #7 ; give a "fire" at screen
- sta 53280
+ ldy #0
+dontforcesx
+ lda xacttbl,y
+ sta xActSpeed+4
+ ;lda #7 ; give a "fire" at screen
+ ;sta 53280
@@ -470,0 +469,4 @@
+ rts
+exitIE2:
+ lda #$ff
+ sta yAct+4
@@ -473,0 +476 @@
+xacttbl byte $04,$fc
@@ -782 +785 @@
-=================================
+;=================================
@@ -1429 +1432 @@
- stx 53280 ; use black color
+ ;stx 53280 ; use black color
@@ -2012,0 +2016 @@
+ jsr exitIE2
ho tolto le modifiche a $d020 di debug. Suggerirei inc/dec sul colore dello sprite quando viene colpito, renderebbe di piu'.
-
Altro fix, riguardo la pulizia dello schermo. Andava ripulita la dynamic table.
rimuovi pure queste 2 chiamate di emptyScreen
win:
;jsr emptyScreen
jsr writeWin ; write win
jsr waitFire
jmp mainLoop
over:
;jsr emptyScreen
jsr writeOver ; write over
jsr waitFire
jmp mainLoop
e aggiungi alla fine di emptyScreen la pulizia
emptyScreen:
ldy #0
ldx #$F
lda #$c0
sta lp2_+2
tya
lp2_:
sta $c000,y
dey
bne lp2_
inc lp2_+2
dex
bne lp2_
;now clear dynamic map table
ldy #[bufChar-B_FB]
lp3_
sta B_FB,y
dey
bne lp3_
rts
-
wow, ho trovato un pò di lavoro x stasera ;)
adesso inserisco il tutto
-
Inserite le modifiche di iAN (anche se a mano, il comando patch si è rifiutanto anche sta volta di fare il lavoro).
la sparizione dell'effetto giallo nello sparo è voluto dato che adesso è difficile essere colpiti ai lati?
adesso devo proavare a vedere a che livello arrivo
-
Il flash l'ho tolto pensando fosse solo per debug. Ho provato a mettere un dec/incremento su $d028/29 per simulare un flash del gorilla ma o non si vede per nulla, o inserendo 2 waitIRQ poi causa una doppia collisione decrementando di 2 le vite... se preferisci semplificarti la vita o lascia cosi' o rimetti il flash del bordo, fai tu.
Per quanto riguarda i diff:
io uso msys e diff ha questa versione
diff - GNU diffutils version 2.7
linea di comando
\msys\bin\diff -u -0 -b -B old new >new.diff
i miei diff li applico con il comando:
\msys\bin\patch -u -p 1 e mi funzionano, non so, se non e' compatibile il risultato di diff tra msys e linux...
-
Non era di debug, ma per avvertire che c'era uno sparo, dato che se uno era su un bordo doveva prendere una decisione per schivarlo.
Adesso vedo come va così, magari potrebbe bastare anche così.
Io uso -Naur per cui basta dare la patch con -p0, forse è questo il problema.
-
Diciamo che sono arrivato al livello 8 con 1 vita e quindi ho perso a 2 palazzi dalla fine.
Direi che come difficoltà potrebbe andare, magari forse mettere un livello 9 abbastanza facile (ammesso che rimanga spazio una volta corretti i bug) potrebbe essere interessante..
Notavo che la caduta con routine di iAN quando cade un palazzo e il gorilla rimane in piedi è pressochè perfetta: sembra che il gorilla scenda giù per il palazzo!!
Per scovare i bug, mi raccomando provate le situazioni più strane.
Adesso vedo per pulire lo schermo al game over
-
:huh: Volevo provarlo ma non riesco a scaricarlo. Usando questo collegamento mi esce il redirect su lycos. http://utenti.lycos.it/ice00/test/elav_.zip (http://utenti.lycos.it/ice00/test/elav_.zip)
E' stato spostato nel frattempo?
-
:huh: Volevo provarlo ma non riesco a scaricarlo. Usando questo collegamento mi esce il redirect su lycos. http://utenti.lycos.it/ice00/test/elav_.zip (http://utenti.lycos.it/ice00/test/elav_.zip)
E' stato spostato nel frattempo?
copialo e incollalo nella barra degli indirizzi (non cliccare direttamente il link)
-
:huh: Volevo provarlo ma non riesco a scaricarlo. Usando questo collegamento mi esce il redirect su lycos. http://utenti.lycos.it/ice00/test/elav_.zip (http://utenti.lycos.it/ice00/test/elav_.zip)
E' stato spostato nel frattempo?
copialo e incollalo nella barra degli indirizzi (non cliccare direttamente il link)
Ok preso, ma facendo salva oggetto con nome dal menù contestuale. Copiandolo nella barra degli indirizzi non va nemmeno; mi dice impossibile aprire il sito internet etc etc...
-
Strano, da me funziona. :huh:
-
Anche se non ho aggiornato il programma in rete, in realtà in questi giorni sto inserendo la nuova tune di Nata.
Completamente riscritta e molto più lunga della precedente e che semprerebbe comprimere molto meglio (portando l'eseguibile su 3970).
Purtroppo al moemnto ci sono dei problemi col packer di GT2 che da qualche problemino di suoni non corretti. Speriamo di risolverli presto.
-
ci sono dei problemi col packer di GT2 che da qualche problemino di suoni non corretti. Speriamo di risolverli presto.
Chissa' Cadaver come ne ha le OO piene, ormai non ne potra' piu' delle richieste di Nata :P
-
Musica inserita e funzionate (usare 8580) il packer ha funzionato :metallica: : 3965 bytes il che ci da 131 bytes per miglioramenti
1) mettre game over su schermo svuotato (probabilmente solo qualche jsr e qualche sta)
2) inserire altri livelli (un livello con 5 palazzi occupa solo 6 bytes).
2-1) Però così il numero di vite scarseggerebbe troppo.Forse bisognerebbe mettere una gemma sul pavimento che salta fuori raramente e che da una vita al gorilla.Ad occhio lo spazio per la gestione dovrebbe esserci aggiungendo altri 4 livelli
2-2) Inserire i primi livelli super facili con 2-3 palazzi in zona centrale in modo da non perdere vite, e dopo quelli attuali
Migliorare le animazioni renderebe il gioco più attranete ma non migliorerebbe la longevità
Qualche ulteriore idea???
-
Migliorare le animazioni renderebe il gioco più attranete ma non migliorerebbe la longevità
Qualche ulteriore idea???
Ciao. Invece dei livelli aggiuntivi io vedrei benissimo, sempre se lo spazio basta, un livello bonus finale (da inventare ex novo).
Potrebbe essere un'idea per aumentare sia la longevità che per introdurre qualcosa di nuovo a livello grafico. Magari poi il livello, se viene fuori qualcosa di carino davvero, potrebbe essere ripetibile a piacimento una volta conquistato finendo il gioco normale. Che ne pensi?
-
131 bytes sono tropo pochi: uno sprite occupa 64 bytes, e solo se non è troppo complicato la compressione lo riduce di metà, quindi al max ci sta 1 solo sprite molto stringato. Introdurre atri carateri grafici non porta via moltissimo (8 byte per carattere non compressi), ma la gestione ex novo di un livello mi sa che introdurrebbe troppo codice aggiuntivo. Per questo l'aggiunta di livelli in più sarebbe facile: si sfrutta l'engine che c'è senza introdurre codice extra in più, ma solo definendo altri schermi (idealemente potrei inserire oltre 20 livelli se si aggiungono solo quelli)!
-
Il bonus lo pensavo riutilizzando lo stesso fondale con le medesime possibilità di spostamento del gorilla, una specie di fuga finale dalla città distrutta, in cui dovrebbe attraversare lo schermo da sinistra a destra, schivando sia i colpi in orizzontale, che in questo caso verrebbero fuori senza bisogno di salire sui resti dei palazzi (l'unica differenza col fondale normale sarebbe mostrare i palazzi danneggiati ma non crollati), sia dei nuovi, con dei caratteri differenti, in verticale visto che ormai i nemici si sono "arrabbiati" per la sua opera... :)
Poi bisogna vedere se l'effetto viene tale da giustificare il tutto.
-
Questo sarebbe già più abbordabile, un po meno adattare la routine di generazione palazzi a generarli non integri, perchè a memoria mi ricordo che era parecchio intricata dovendo agire su 2 piani. Devo vedere nel weekend quale strada adottare...
-
Altro che weekend: mi è venuta l'ispirazione ed ecco il risultato: una macchina che sfreccia da sx a dx ogni tanto.
Se la si prende, si guadagna una vita: bytes finali 4052, per ciui posso aggiungere altri livelli!
Nota:
Adesso la macchina appare mediamente ogni 255 frame (max 5 secondi), ovviamente l'idea è che poi bisogna farlo mooolto più soft, ovvero che in 99 secondi appaia 1 volta su 2 o 3...
Comunque c'è qualcosa che non va: state fermi e noterete che la macchina a volte vi passa attraverso e non la prendete.
In pratica ho messo il controllo collisione dove prima resettavo il contatore collisione per evitare di contare due volte la collisione col proiettile. qui sembra che la cosa crei problemi.
-
Spostato il check collisioni: adesso sembra andare.
Ho cercato di mettere l'uscita macchina difficile tutta basata su random: non usciva quasi mai. Allora ho messo random + indice per essere sicuro chealmeno esca. Forse adesso esce troppo spesso.
Provate e vedete, in caso posso lazare il fattore random per renderlo più lungo ad apparire (l'ottimo sarebbe che uscisse 2 volte max 3 nel corso del gioco)
4058 bytes. Adesso direi di aggiungere 2 livelli e far partire conteggio da 0, così da avere 10 livelli:0..9.
-
4096 bytes tondi tondi.
Aggiunti 2 livelli, il gameoever che pulisce lo schermo e fatto sparire la macchina se non veniva presa (andava ad oltranza).
Ora devo solo impacchettare il tutto (inserendo la versione stereo del sid come bonus), perchè il gioco è completo
-
putroppo c'è un bug pericoloso: trovate error.svf dentro lo zip
In pratica, dopo che era passata la macchina (senza prenderla) e questa si era riposizionata fuori schermo, sono stato colpito: avevo 9 vite, ma mi è uscito lo game over.
Premendo fire per ripartire, le vite continuano a decrementarsi finchè si muore.
L'unica causa che mi viene in mente (e adesso indago) è che ci sia sovrapposizione tra car e pallottola fuori schermo: in questo caso la soluzione sarebbe abbastanza semplice.
-
Il prblema era proprio quello. meno male.
Già fixato. Comunque continuo il test per essere sicuro che sia tutto ok al 100%
-
L'unica cose che vedo è che: se si muore del tutto mentre la macchina stava correndo, essa poi prosegue anche ripartendo. poco o male.
Invece, quando la macchina fa tutto il giro, per il fatto che deborda in posizione 0, uno potrebbe prendere una vita andando ad aspettarla a sinistra per quel frame che essa rimane pseudo visibile.
Però a rimuovere sta cosa la vedo dura!
-
Il prblema era proprio quello. meno male.
Già fixato
Stavo per segnalartelo :)
Riscarico.
-
Gioco rilasciato. Stamattina ho risolto il problema macchina semplicemente facendola andare da destra a sinistra, così al mssimo uno ha solo il preavviso che arriva la macchina dato che compare per un inezia a sinistra.
-
Sono arrivato al level 9 e ho finito...fin troppo facilmente rispetto ai livelli precendenti.
E' giusto che sia composto SOLO da 3 palazzi piccoli? In confronto il livello 0 e' piu' difficile.
Anywayz Cheers! :lol:
-
Si, l'ultimo è così ed è voluto per dare respiro al giocatore che dopo il livello 7 si aspettava di sicuro 2 livelli ancora più in casinati, invece sono molto soft.
La macchina esce mediamente nei 99 secondi di gioco, quindi forse troppo spesso, ma penso che per chi ancora non ha capito come avvengano gli spari, magari ci perde un pochino le prime volte.
-
http://noname.c64.org/csdb/release/?id=38525&show=review (http://noname.c64.org/csdb/release/?id=38525&show=review)
Sta avendo successo :) :metallica:
-
http://noname.c64.org/csdb/release/?id=38525&show=review (http://noname.c64.org/csdb/release/?id=38525&show=review)
Sta avendo successo :) :metallica:
Direi che è un successo meritato. Bravo Ice.
p.s.: gustoso uno dei commenti su noname, quello che cita la protovision :D
-
Applausi!!!
Grazie per aver fornito un nuovo gioco alla comunità..... a quando il prossimo? :D
-
Direi bravi a tutti quelli che mi hanno aiutato, vedi qui sul forum! :hail:
Adesso riprendo con LSS2, ho ancora materiale fatto allo scorso spresiano RC che forse non avevo neppure messo in rete.
Ma già ho avuto soffiate per fare il giochetto del prossimo anno, solo che è complicato, così mi deve venire l'ispirazione giusta :)
-
Direi che è un successo meritato. Bravo Ice.
Sì,concordo. :)
-
Ho aggiunto questo giochino nel database del sito:
http://ready64.altervista.org/giochi/scheda_gioco.php?id=903 (http://ready64.altervista.org/giochi/scheda_gioco.php?id=903)