Autore Topic: Lss Mimigame  (Letto 21082 volte)

ice00

  • Utente
  • **
  • Post: 469
    • http://digilander.iol.it/ice00
Lss Mimigame
« Risposta #105 il: 08 Luglio 2004, 09:38:54 »
 Alcune modifiche che mi vengono in mente per risparmiare qualche byte:

ridurre lunghezza scritte da stampare:
GAME OVER -> END
WELL DONE SARA: YUO ARE THE BEST -> WELL DONE

29 byte -> potenzialmente 15 risparmiati

Togliere la velocità a 1,5 pixel dei mostri e ripristinarla a 2: questo dovrebbe togliere 10 byte -> 5 potenziali


Usare 4 cifre per il punteggio al posto delle 6:
con due livelli non penso si vada oltre 9999 di punteggio, quindi:

->si toglie tutta la gestione a 6 cifre (aggiunta punteggio, confronto, copia highscore, stampa) e la si fa a 4
->Eventualemnte si stampano due 00 per simulare le 6 cifre

Risparmio non ancora stimanto ma forse sui 20 byte.
Risultato aspettative modifiche: 40 byte risparmiati.

Siamo ancora lontanissimi dai 200 e passa da togliere :(

Luca/FIRE

  • Utente
  • **
  • Post: 136
    • http://fire.plus4.net
  • Gioco Preferito: Wizball
Lss Mimigame
« Risposta #106 il: 08 Luglio 2004, 11:07:49 »
 
Citazione da: "ice00"
Siamo ancora lontanissimi dai 200 e passa da togliere :(
Ora l'obiettivo è risparmiare 154 bytes in tutto da lss17.prg, vero?
In quest'ottica il tuo mi sembra un primo dignitoso risparmio. Effettivamente END non vuol dir nulla, rispetto al tradizionale GAME OVER, e soprattutto quei 5 potenziali bytes del movimento medio di 1.5 pixel sono stati inseriti per la giocabilità, quindi occhio, forse è il caso di sacrificarli solo in fuuro...

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Lss Mimigame
« Risposta #107 il: 08 Luglio 2004, 12:02:18 »
Citazione da: "ice00"
questa routine è di 69 byte: è possibile dimezzarla?
Di persè si tratta di copiare due zone di memoria locate in certe posizioni.
Sto pensando se il Kernal ha codice simile da poter richiamare per effettuare la copia.
JSR $A3BF
E' nel Basic ma puoi usarla
; move bytes routine
;  $5F/$60 source start address
;  $5A/$5B source end address
;  $58/$59 destination end address

 
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

ice00

  • Utente
  • **
  • Post: 469
    • http://digilander.iol.it/ice00
Lss Mimigame
« Risposta #108 il: 08 Luglio 2004, 12:46:37 »
 Utilizzando questa procedura del Basic, con un conto a spanne si dovrebbe passare da 69 a 57 byte con un risparmio di 12 (6 potenziali).

Chissa che a forza di byte ce la facciamo

ice00

  • Utente
  • **
  • Post: 469
    • http://digilander.iol.it/ice00
Lss Mimigame
« Risposta #109 il: 08 Luglio 2004, 14:58:50 »
 Alcuni calcoli di prova fatti al volo danno 55 byte risparmiati utilizzando:
4=BK_SPACE al posto di BK_KILL nel secondo livello (tanto si vede sempre nero)
18=utilizzo solo WELL DONE
4=level, lifes, bonus come pagina 0
10=xscroll,xmap,xblock,rowleft coma pagina 0
2=time timed come pagina 0
2=removeEnemy tolta da soubroutine e messa al posto della chiamata
15=utilizzo routine Basic per installare caratteri

ne dovrebbero rimanere ancora 104

bye
S.T.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Lss Mimigame
« Risposta #110 il: 08 Luglio 2004, 15:07:06 »
Citazione da: "ice00"
Utilizzando questa procedura del Basic, con un conto a spanne si dovrebbe passare da 69 a 57 byte con un risparmio di 12 (6 potenziali).

Chissa che a forza di byte ce la facciamo
50 byte, arrangiando un po' i dati
Codice: [Seleziona]
org $800
;A3BF move bytes routine
;  $5F/$60 source start address
;  $5A/$5B source end address
;  $58/$59 destination end address

CDEND = $58
CFROM = $5f
CFEND = $5A

     sei

     lda  #$33
     sta  $01

     lda  #$40
     sta  CDEND+1
     lda  #$D0
     sta  CFROM+1
     lda  #$D8
     sta  CFEND+1
     JSR TRANSF

     ldx  #>char
     stx  CFROM+1
     inx
     stx  CFEND+1
     lda  #$3B
     sta  CDEND+1
     JSR TRANSF

     lda  #$37
     sta  $01
     cli
    ;rts

;----------------------------
TRANSF:
     lda  #0
     sta  CDEND
     sta  CFROM
     sta  CFEND
     JMP  $A3BF
;----------------------------
    org $4000; must be at start of any page $xx00
char:

-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Luca/FIRE

  • Utente
  • **
  • Post: 136
    • http://fire.plus4.net
  • Gioco Preferito: Wizball
Lss Mimigame
« Risposta #111 il: 08 Luglio 2004, 15:22:04 »
 Forza giovini che ce la si fa, santa zeropage vergine e martire.
ice00: forse è megliosostituire "POINTS" con il più riconoscibile "SCORE".

Tra l'altro: ma quanto vi invidio voi che sapete fare codice! Io non mi nego, in fondo la mia rivista sul Plus/4 e le mie piccole demo me le sono fatte tutte da me (anche se ogni volta mi chiedo "ma come ho fatto?", specie per quanto riguarda l'interrupt, che avrò usato una sola volta in "Logocompo3" riuscendo a richiamare il jmp address giusto con qualche PLA e PHP vatti a ricordare).
Ricordo che una volta provai a fare un semplice 1x1 scroll, che però soffriva di morbo di parkinson momentaneo (perché? perché non avevo eliminato l'interrupt di default che penso punti al basic?), e un'altra volta, sotto la guida di Mermaid dei Creators son riuscito a fare splitscreen e qualche riga di raster, sia in variabile tempo che spazio. Era davvero divertente, poi ho dimenticato tutto. :doh:
Eppure il mio sogno è quello di fare la demo fessacchiottola con gli effetti fessacchiottoli, niente di ché: lo scorrimento, il dycp, il charplasma, lo scorrimento non 1x1 chars e poco altro... :(  

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Lss Mimigame
« Risposta #112 il: 08 Luglio 2004, 18:20:20 »
 Ragionandoci sopra....
Codice: [Seleziona]
   org $810

        sei

        lda  #$33
        sta  $01

        ldy #0
        ldx #8
lp1
        lda $d000,y
        sta $3800,y
        dey
        bne lp1
next
        inc lp1+2
        inc lp1+5
        dex
        beq exit
        cpx #$06 ; do not overwrite the predefined chars $3a00-3aff
        beq next
        bne lp1
exit
        lda  #$37
        sta  $01
        cli
        rts

;----------------------------
    org $3a00 ; redefined chars are already in place!
char:
    repeat 256
    .byte $bd
    repend
    org $3b00
    .byte $00
e fanno solo 38 byte. L'importante e' che siano solo 256 byte da non sovrascrivere
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

ice00

  • Utente
  • **
  • Post: 469
    • http://digilander.iol.it/ice00
Lss Mimigame
« Risposta #113 il: 08 Luglio 2004, 19:31:08 »
 
Citazione
ci pensi tu a passare alla gentaglia di HVSC il file .sid?

appena mandato

Citazione
e fanno solo 38 byte. L'importante e' che siano solo 256 byte da non sovrascrivere
Quasi dimezzata come volevasi :)

Adesso vado a piazzare tutti sti fix discussi oggi.

bye
S.T.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Lss Mimigame
« Risposta #114 il: 08 Luglio 2004, 22:17:25 »
 Trovato un altro punto: ridefinisci
rowTblLo = $ECF0
la tabella degli offset e' gia' nel kernal :)
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

ice00

  • Utente
  • **
  • Post: 469
    • http://digilander.iol.it/ice00
Lss Mimigame
« Risposta #115 il: 08 Luglio 2004, 22:33:20 »
 lss18.prg: risparmi ottenuti:

1    : tolta un LDA, CMP rimasto spurio sul codice
4    : tolta la chiamata al reset musica quando si muore
[-2] : uso BK_SPACE al posto BK_KILL 2° livello: sembra che ci si perda, perciò non inserito
5    : utilizzo SCORE al posto di POINTS, tolto uno spazio e spostato a dx
11   : utilizzando routine con caratteri in place (qualche altro carettere può essere risparmiato se si riduce la zona di 0 tra i caratteri in place e l'ultima parte di codice
19   : utilizzo WELL DONE
13   : variabili pagina zero

Rimangono quindi +101

Attenzione: giocate parecchio adesso, per vedere se si sono effetti indesiderati che prima non c'erano.
Dato che utilizzo le nuove variabili a pagina 0, può essere che le routine kernal utilizzate possano modificare i valori.

Adesso mi rimane solo l'ottimizzazione dell'utilizzare lo score a 4 cifre al posto di 6, ed eventualemente espandere le routine chiamate una volta in place.
Nella più ottimistica delle ipotisi si dovrebbe risparmiare 30-40 byte.

A questo punto sono a corto di ottimizzazioni: ho guardato il codice ma non vedo altre cose da sfruttare :(
Qualche idea?

p.s. col la tabella del kernel si risparmiano altri 26 byte! Non ancora inserite nel file appena uiplodato

ne rimangono quindi 75

bye
S.T.

Luca/FIRE

  • Utente
  • **
  • Post: 136
    • http://fire.plus4.net
  • Gioco Preferito: Wizball
Lss Mimigame
« Risposta #116 il: 08 Luglio 2004, 23:58:38 »
 
Citazione
Attenzione: giocate parecchio adesso, per vedere se si sono effetti indesiderati che prima non c'erano.
Ok, giocato, la cosa pare andare tranquillina.

Citazione
p.s. col la tabella del kernel si risparmiano altri 26 byte! Non ancora inserite nel file appena uplodato ne rimangono quindi 75
...dopodiché, tolti i 30-40 eventuali già citati, saremo sotto la cinquintina di bytes, e poi si vedrà, giusto?

Sai cosa? Mi chiedevo: dato che le voci nel pannello superiore (lives, time) sono tutte centrate, una manciata di bytes si risparmia in compressione mettendo centrati sotto di BONUS il diamante e le cifre (perché due spazi vanno ad impacchettarsi rispettivamente con quelli precedenti e successivi)? Così, tanto per fare un po' il geko...

I due problemi riscontrati nel gioco sono i soliti:
- nemici e scorrimento vivono tra di loro un brutto rapporto , che fa bloccare i primi, ed a volte dà un po' fastidio
- ancora, quando il secondo quadro al suo inizio scorre da destra, i primi 2 caratteri in verticale in alto a sinistra incontrano una maschera di colore carattere che li fa apparire per un attimo bianchi ed hires, dopodichè forse il codice usa la sua mask ma solo dopo, fino al prossimo passaggio a destra. Peccato veniale.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Lss Mimigame
« Risposta #117 il: 09 Luglio 2004, 01:17:37 »
 Una buona notizia: Ti ho fatto il generatore di codice per loopSG/loop2SG.
Con questo e alcune altre modifiche (tipo sostituire jsr xxxx/rts con Jmp xxxx) e exomizzando il tutto arrivo a 4102 bytes.
Evito di postare il diff perche' e' veramente lungo (9kb) e te lo mando in posta.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Luca/FIRE

  • Utente
  • **
  • Post: 136
    • http://fire.plus4.net
  • Gioco Preferito: Wizball
Lss Mimigame
« Risposta #118 il: 09 Luglio 2004, 02:31:09 »
 
Citazione
arrivo a 4102 bytes.
vabbè, dai, allora è fatta, accident'a voi masnadieri!   :mavieni:  
A 'sto punto davvero il truccaccio di avvicinare i #$20 uguali nel testo potrebbe essere utile.
Complimenti a IanCoog, che, ho come l'impressione, meriterebbe il jingle della sigla italiana di Starzinger per le sue intro in HF... ;)
Approposito IanCoog: ma il tuo IACcico "Minc*a" indica chiaramente un trascorso o sul ng o in chat!
Come dire: Kit-ty, la sua scienza uuu-seee-rà.

PS: qui qualcuno ha detto che la tua città, Ghiffa, è gemellata con una simile che si chiama Geipegga; ti spedirò con pacco celere la testa dell'imbecille che ha osato vomitare tale oscenità.

Luca/FIRE

  • Utente
  • **
  • Post: 136
    • http://fire.plus4.net
  • Gioco Preferito: Wizball
Lss Mimigame
« Risposta #119 il: 09 Luglio 2004, 04:16:10 »
 Durante una delle mie passeggiate notturne in bici (eh, guarda che ore sono!) ho pensato questo: "Ma mica è giusto in un gioco di 2 livelli 2 che venga premiato il giocatore che si è fatto ammazzare più volte, prendendo più diamanti!"

Insomma, secondo me:
quando si conclude il secondo livello, dopo il relativo bonus time, bisogna sommare (anche senza scrivere nulla su schermo!) 1000/1500 punti per vita risparmiata, ma proprio a livello di ADC$xxxx, una cosuccia così eh, di pochi bytes!
Pochi bytes che però fanno la differenza sulla (piccola?) sfida che offre il gioco.