Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - i03862

Páginas: [1]
1
Programación / Re:Problemas con scroll suave a toda pantalla
« en: Diciembre 02, 2018, 08:24:17 »
Bueno Dashiad, lo prometido es deuda... Sobre lo de dar mas libertad de movimientos al
personaje principal te cuento algo que hice en el Amiga y que puede resultarte.

Yo hice algo parecido a lo que tu buscas añadiendo al control del scroll un par de "flags".  Un "flag" para
detectar el principio del mapa y otro para cuando llegas al final del mismo. Pseudograficamente seria asi :
(lo hago asi de "chapuza" porque me ha sido imposible subir un grafico, ¡me daba error!)
 
                             TAMAÑO DE LA PANTALLA DEL C-64   (PIXELS)
 0                                                          160                                                        320
  _____________________________________________________________________
  |                                                            |                                                             |
  |-----------------------------------------------------------------------------------------------|
  |                                                                                                                          |
  |       DATOS DEL MAPA.......                                 DATOS DEL MAPA ...................   |
  |                                                                                                                          |
  |          ""      ""      ""                                                ""        ""         ""                    |
  |                                                            O                                                            |
  |           ""     ""       ""                              |                ""        ""         ""                    |
  |                                                            /\                                                            |
  |____________________________________________________________________|
                                   |                         SPRITE                                         |
     LIMITE MIN XPOS = 40 ------------------------------------- LIMITE MAX XPOS (230)

La forma que hice en su momento (creo recordar) era dar libre movimiento al personaje (que
aqui asumo que es un sprite) hasta que llegara a los limites (en este ejemplo min posx=40 y
max posx=230. Por supuesto los flags estan "reseteados" (por asi decirlo) al principio.

Cuando se llegaba a esos limites activaba el flag correspondiente (de "0 a 1" por ejemplo). La
rutina de scroll, antes que nada, chequeaba dicho flag. Si estaba a "1" (activo) saltaba al final
de la rutina, es decir, no efectuaba el scroll correspondiente. En ese momento, el joystick
(o teclado) pasaria a controlar el desplazamiento del personaje.En caso de que estuviera a "0"
ejecutaba el scroll sin problemas. Codigo ejemplo para tope minimo (x) del mapa:

Scroll_left    Lda  lefttop_flag           ; Chequea the flag de limite minimo del map (mapx=0)
                   bne noScroll_left         ;  Esta a 1? entonces no hacer mas scroll.
                   jsr   do_ScrollLeft        ;  Hacer scroll   
noScroll_left rts                              ;  Salir

Naturalmente, ese mismo flag (u otro que definas) puede controlar que el sprite se desplace
o se quede quieto (en ese momento exacto, el desplazamiento corresponderia a las rutinas
que efectuan el scroll.
 
Otro efecto de los valores que he puesto en el ejemplo es que como el sprite principal nunca
llega a 255 no tienes que preocuparte por controlar el X-MSB ($d010). Ademas creo que topes
maximos de 40 y 230 que tiene el ejemplo son bastante holgados para dar una gran libertad
de desplazamientos al personaje..

No se si esto te puede servir para lo que quieres hacer. Ya te dije que lo hice en el Amiga que
obviamente tiene un manejo de graficos muy diferente pero creo que la escencia es la misma.

En fin, cuentame que te parece la idea...


2
Programación / Re:Problemas con scroll suave a toda pantalla
« en: Noviembre 30, 2018, 16:14:57 »
Por cierto, hablando de otra cosa, he publicado un mensaje en la seccion de "general" en este foro para
comentaros la experiencia que he tenido con otros foros. Si os apetece, echarla un vistado y me decis
que opinais al respecto. El titulo es "Mi experiencia forera"

¡Gracias y hasta muuy pronto...!

3
Programación / Re:Problemas con scroll suave a toda pantalla
« en: Noviembre 30, 2018, 16:12:10 »
Muchas gracias chicos, ya empiezo a ver claro el final del tunel... En esto momentos estoy resolviendo
un pequeño problemilla familiar sin importancia pero que requiere de mi atencion. Pero, a partir de
este lunes (3/12) me meto a saco con el codigo que me ha pasado Dashiad. Y todo lo que vaya sacando
en claro lo ire publicando para saber vuestra opinion..  :) :)

¡Muchisimas gracias y seguir asi..Estamos en contacto..!

4
General / Mi experiencia "forera"
« en: Noviembre 30, 2018, 16:06:10 »
Hola a todos, Si me leisteis en mi mensaje de presentacion en el apartado "off-topic", sabreis que soy un
commodoriano que me he vuelto a re-enganchar a nuestro querido C64. Ahora me encuentro en un proceso
de Re-Aprendizaje a programar sobre todo juegos (despues de un parentesis de casi 30 años) y aqui es
donde entra este mensaje.

Antes que nada, y lo mas importante, es que este mensaje es simplemente una opinion en base a la
experiencia que he tenido al respecto. ¡No quiero levantar polemicas ni nada por el estilo! Si alguien
pensara asi, mis mas sinceras disculpas por ello, no es mi intencion!

Desde luego me he llevado una maravillosa sorpresa al ver como los miembros de este foro pueden darte
su ayuda para que puedas aprender aunque seas un novato (yo me considero asi ya que tengo olvidado
todo mi conocimiento por los años transcurridos).

La parte del foro donde me he metido principalmente es el de Programacion y desde luego, la ayuda que
he recibido ha sido A-LU-CI-NAN-TE. Personas como Dashiad, Rulas, Darro, javier,etc me han dado
consejos que me han sido muy utiles en mi programacion.

Lo de mi experiencia "forera" se basa en varios foros de habla inglesa en las que he intentado entrar
(no voy a nombrarlos por elegancia...) en las que solo te admiten si tienes experiencia, vamos que
si eres un "top-coder". ¡Me parece increible! ¿Que se creen? ¿Que ellos son la cuspide de la creacion?
¿Los King of code? ¡Me parece que en sus comienzos, ellos serian tan novatos como lo puedo ser yo!

En cambio, aqui todo han sido facilidades y ayuda a tope. Mucha gente de fuera se cree que los
españoles (o personas de habla hispana) somos inferiores en cuanto a tecnologia, No lo creo pero
de lo que si estoy seguro es que a colaborar y echar una manita en problemillas tecnicos como los
que se producen aqui no tenemos rival!

Siento mandar este ladrillo de mensaje pero queria poner mi opinion sobre este tema que me
parece injusto. Pero como he dicho.. ¡¡Solo es una opinion personal!

Me gustaria saber que pensais de todo esto, lo mismo estoy equivocado pero es simplemente la
experiencia que he tenido en este asunto..

¡Seguir asi, Sinceramente me este me parece un foro cojonudo y no dudeis que hare lo posible
por mantenerlo vivo! ¡Todo sea por nuestro querido C64!  ;) ;) ;)


5
Programación / Re:Problemas con scroll suave a toda pantalla
« en: Noviembre 29, 2018, 22:01:07 »
Ok, muchisimas gracias Dashiad, a ver si teniendo algo real puedo empezar a experimentar un poco. Si no
recuerdo mal, en los 80 los mapas que hacia (o niveles les llamaba yo) eran de 7 pantallas. Espacio que
podia meter en una sequencia de bytes de la forma que te dije en el ultimo mensaje. Por lo que veo, la
tecnica de "tiles" parece mucho mas eficiente en cuando a uso de RAM asi que con lo que puedas subir
tendre algo para terminar de comprender esta tecnica. Y de nuevo gracias por tus explicaciones

6
Programación / Re:Problemas con scroll suave a toda pantalla
« en: Noviembre 29, 2018, 13:12:40 »
RULAS, por mi de acuerdo lo de la quedada. Mejor despues de las Navidades, Dashiad me mando un mensaje diciendo que tambien estaba de acuerdo. En enero vamos concretando el tema. ¡Perfecto!

DASHIAD, ¡Uff..me estoy perdiendo! Alla, a finales de los 80, hice algunas cosillas con scrolling fino y no
utilizaba tiles ni double-buffer pero, despues de tantos años ni me acuerdo como lo hice. No llego a
comprender el significado de los tiles y de como usarlos (despues de tanto tiempo me siento un poco
"pardillo" en esto). Creo que utilizaba un mapa (parecido a los que se crean en el C64prg_Studio o sea
sequencias de caracteres organizados en filas y con un ancho de mapa de 256 columnas, es decir:

        linea 1    AGRTRTG5BCDEDEFRDFRFFGGGHHHHJJ...............JJKJJ
        linea 2    GLREYHLRTYREKDFKDFKREMGFMTYYUU...............JUJU
        linea ..........
        linea 15  GFREREGRTHTYJYTJTYJTYUJTYJTYJYTJKK..............UTYJJ

Cada letra en mayusculas es un caracter modificado y entonces leia secuencialmente dichas lineas
y las pintaba en pantalla. Como viste en el 1º listado, el control del registro de scroll lo hacia dentre
de la rutina de interrupcion y el "ploteo" de caracteres lo hacia fuera, en el bucle principal.  Por
supuesto, todo esto te lo estoy contando arañando lo mas que puedo del baul de mis recuerdos  ;)
por eso todo lo que me estas contando me suena un poco a chino.

Si alguien pudiera pasarme algun codigo, por pequeño que sea, me ayudaria mucho a comprender todo
este tema. ¡O por lo menos algun sitio en internet que pudiera sacar algo claro!. yo he estado buscando
y lo unico que he visto son los "rants" de Cadaver pero es demasiado complicado para mi

!Os lo agradeceria en el alma.. ??? ???.!

7
Off-topic / Re:Hola, me presento
« en: Noviembre 29, 2018, 12:49:28 »
Bueno, en cuanto al nick se trata de un usuario que usaba antiguamente en el trabajo. Fueron tantos años
usandolo que no se me olvida. Ahora utilizo otro mucho mas raro!! la seguridad informatica ya sabes,,jejeje

Y si, en los ochenta hice varios proyectos sobre todo juegos, no salieron a la luz pero guardo momentos
muy entrañables de aquellos tiempos.. Ahora he querido retomar un poco todo aquello y, viendo que hay
una comunidad en español muy activa en este foro pienso que todo lo que podamos ayudar y compartir
experiencias y conocimientos nos vendra muy bien a todos.

Espero volver a refrescar conocimientos con los miembros del foro (en especial de programacion) y darme
una vuelta en la maquina del tiempo hacia la edad de oro de la micro-informatica  :D :D :D

8
Off-topic / Hola, me presento
« en: Noviembre 28, 2018, 18:21:04 »
Hola a todos lo commodorianos, Jozepzin me comento al activarme la cuenta que me presentara un poco
y ahi lo mando :
 Me llamo Fran, soy de Madrid y desde hace la friolera de 30 años soy fanatico de Commodore, Primero
con el Vic-20, luego pase al C-64 (que todavia conservo!!), luego al Amiga (tengo un 1200 funcionando
a tope!!) En los ultimos años me he dedicado al diseño grafico con maquinas actuales pero sin dejar de
lado a mis pequeñines. Me encanta la programacion de juegos (sobre todo retro), los graficos, etc y creo
que en este foro he encontrado un sitio donde intercambiar ideas, conocimientos sobre este apasionante
mundillo.

Gracias a todos y espero ser un usuario lo mas activo posible...

9
Programación / Re:Problemas con scroll suave a toda pantalla
« en: Noviembre 28, 2018, 18:13:00 »
Dashiad : Genial, yo ahora estoy de trabajo hasta arriba pero en unos dias tengo vacaciones asi que ya nos
ponemos en contacto a traves de este foro. Por cierto, he leido por ahi que se pueden mandar mensajes
en privado. Lo digo por el tema de darnos el whatsapp para contactar que publicamente, no me gusta
mucho la idea. Bueno, ya lo vamos preparando. Otra cosa, lo prometido es deuda. En mi mensaje anterior
dije de mandaros una rutina para hacer scroll (de caracteres)un poco mas optimizada que la anterior,a ver que os parece. Bueno, ahi va...

Código: [Seleccionar]

charsrcl 
       ldy     column
       ldx     #0
fill    lda     line0,y
       sta     1024,x
       lda     line0,y
       sta     1064,x
       lda     line0,y
       sta     1104,x
       lda     line0,y
       sta     1144,x
       lda     line0,y
       sta     1184,x
       lda     line0,y
       sta     1224,x
       lda     line0,y
       sta     1264,x
       lda     line0,y
       sta     1304,x
       lda     line0,y
       sta     1344,x
       lda     line0,y
       sta     1384,x
       lda     line0,y
       sta     1424,x
       lda     line0,y
       sta     1464,x
       lda     line0,y
       sta     1504,x
       lda     line0,y
       sta     1544,x
       lda     line0,y
       sta     1584,x
       lda     line0,y
       sta     1624,x
       lda     line0,y
       sta     1664,x
       lda     line0,y
       sta     1704,x
       iny   
       inx
       cpx #40   ; Limite de 40 columnas ?
       bne fill
       rts
        ;
        ; Datos
        ;
column  !byte    0    ; numero de columna a pintar en pantalla
        ;
line0  !byte    1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,22,24,25
        !byte    26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47
        !byte    48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69
        !byte    70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91
        !byte    92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109
        !byte    110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125
        !byte    126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141
        !byte    142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,156
        !byte    158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173
        !byte    174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189
        !byte    190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205
        !byte    206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221
        !byte    222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237
        !byte    238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253
        !byte    254,255,0,0,0,0,0,0,0,0,0,0


La cosa esta en que si incrementas el valor de "column" el scroll es de derecha a izquierda
y si lo dercrementas, el scroll es al reves..

Tengo que probarla insertandola en un scroll fino a ver que tal va. Tengo por ahi una
rutina de raster estable que tiene muy buena pinta. Vamos a ver como va la cosa..
Os cuento en breve....



10
Programación / Re:Problemas con scroll suave a toda pantalla
« en: Noviembre 28, 2018, 10:59:44 »
Otra cosa mas, Por cierto Rulas, he visto tus videos en YouTube sobre tus logros con esta maravillosa
maquina. Ojala yo pueda ir por el mismo camino. Yo tambien vivo en Madrid. Una cosa que podriamos
hacer es apuntarnos (los que podamos o queramos) a una quedada para intercambiar ideas, experiencias
sobre el desarrollo de programas para nuestro querido C64 (o el Amiga del cual soy tambien forofo!).
Seria interesante ver y compartir los desarrollos sobre todo de juegos.

11
Programación / Re:Problemas con scroll suave a toda pantalla
« en: Noviembre 28, 2018, 10:54:26 »
Muchas gracias a todos por la rapida respuesta. Si, la rutina en si no esta nada optimizada. La primera version
de este codigo tenia la rutina de scroll fino y el dibujo de caracteres dentro de la misma interrupcion y era
logico que temblara (demasiado que procesar para el raster) pero cuando saque la rutina de dibujo fuera,
me sorprendio tener casi el mismo resultado. He leido con atencion la respuesta de Dashiad y creo que se
por donde van los tiros. De todas formas, estoy implementando una nueva rutina de "ploteo" de caracteres,
creo que menos intensiva de calcular, y que me va a permitir tener un scroll continuo en cualquier direccion,
(bueno eso espero ;)). En cuanto tenga algo factible, la publico por aqui.. Y, otra vez, gracias por vuestra
ayuda..

12
Programación / Problemas con scroll suave a toda pantalla
« en: Noviembre 27, 2018, 18:00:50 »
Hola a todos los commodorianos. Es mi primera vez en el foro y me gustaria que alguien me ayudara
para resolver un problemilla que me esta voviendo loco. He hecho un programa para sacar un scroll
horizontal pero no es estable (tiembla). He metido el codigo de control del scroll dentro de la
interrupcion y tambien por fuera (en el bucle principal) y sigo teniendo el mismo problema. Mando
el codigo para ver si alguna alma samaritana me puede echar un cable. Muchisimas gracias de
antemano
Código: [Seleccionar]

;*************************************************************
;*   SCROLL FINO CONTROLADO POR JOYSTICK EN PUERTO 2
;*************************************************************

scrloc01        = 1384          ; ultima columna de la pantalla
scrloc02        = 1424
scrloc03        = 1464
scrloc04        = 1504
scrloc05        = 1544
scrloc06        = 1584     
scrloc07        = 1624
scrloc08        = 1664
scrloc09        = 1704
scrloc10        = 1744
scrloc11        = 1784
scrloc12        = 1824   
scrloc13        = 1864
scrloc14        = 1904
scrloc15        = 1944
scrloc16        = 1984
joy2            = 56320         ; Joystick puerto 2
xfine           = $fb           ; Numero de pixels a desplazar
column          = $fc           ; Puntero al siguiente dato a "pokear"
irqexit         = $ea81         ; Rutina de interrupción del Kernal
        ;
        !to "scroll.prg",cbm     ; tipo de CPU ( C-64 )
        ;
        *= $c000                ; Direccion de comienzo
        ;
init    lda     #$07            ; Inicializa variables
        sta     xfine
        lda     #$00
        sta     column
        sei                     ; Desactiva interrupciones del sistema
        lda     #$00
        sta     $d020           ; Color de borde a negro
        lda     #147
        jsr     $ffd2           ; borra la pantalla
      lda     #$7f
        sta     $dc0d           ; Desactiva teclados reloj, etc
        lda     #<irq1
        ldx     #>irq1
        sta     $314            ; Prepara la 1ª interrupcion IRQ
        stx     $315
        ldy     #$1b
        sty     $d011           ; Pone la primera linea raster
        lda     #$01           
        sta     $d01a           ; Activa eh tipo de interrupción (raster)
        cli                     ; Activa interrupciones del sistema
        ;
        ;       Main loop
        ;
hold    jsr     charplot        ; Pokea los datos en pantalla   
        jmp     hold            ; bucle sin fin
        ;
        ; Custom IRQ routines
        ;
irq1    inc     $d019           ; Reconoce interrupciones raster
        lda     #$00
        sta     $d012           ; 1º linea raster (comienzo de la zona de scroll)
        lda     #$01
        sta     $d021           ; Pone el color de la pantalla a blanco
        lda     #<irq2
        ldx     #>irq2
        sta     $314            ; Prepara la segunda interrupción raster
        stx     $315
        ;
        lda     xfine           ; Codigo de scroll fino     
        sta     $d016           
        lda     joy2            ; Lee el joystick
        and     #15
        cmp     #$07            ; A la derecha?
        beq     scroll          ; Si, hace el scroll
        jmp     irqexit         ; No, salta al sistema
        ;
scroll  lda     column          ; Chequea el final del los datos a "scrolizar"
        cmp     #$ff            ; Limite alcanzado?
        bne     goscroll        ; No, sigue haciendo el scroll
        jmp     irqexit         ; Si, final del scroll
        ;
goscroll   
        lda     xfine           ; Lee el flag de desplazamiento fino
        sec                     
        sbc     #$01            ; velocidad del scroll
        and     #$07            ; Este trozo solo hace eso : desplaza la información de
        sta     xfine ; pantalla 7 a 0 Pixels (scroll de derecha a izquierda)
        jmp     irqexit ;
        ;
irq2    inc     $d019           ; Reconoce interrupciones rastree
        lda     #$60
        sta     $d012           ; 2º linea raster
        lda     #$08           
        sta     $d016           ; Zona de pantalla fija (para títulos, puntos, récords, etc)
        lda     #$03
        sta     $d021           ; Pone el color de pantalla a azul claro
        lda     #<irq1
        ldx     #>irq1
        sta     $314            ; Vuelve a poner la 1º rutina IRQ 
        stx     $315
        jmp     irqexit ; Sale al sistema
        ;
        ; Plot & scroll chars routine
        ;
charplot
        lda     xfine ; Comprueba la posición del scroll (Pixels)
        beq     endsec          ; Ha llegado a 0? Entonces hace scroll completo de caracteres
        jmp     nomove     
endsec  ldx     #$00            ; Scroll completo de caracteres
wrapmsg lda     scrloc01+1,x
        sta     scrloc01,x
        lda     scrloc02+1,x
        sta     scrloc02,x
        lda     scrloc03+1,x
        sta     scrloc03,x
        lda     scrloc04+1,x
        sta     scrloc04,x
        lda     scrloc05+1,x
        sta     scrloc05,x
        lda     scrloc06+1,x
        sta     scrloc06,x
        lda     scrloc07+1,x
        sta     scrloc07,x
        lda     scrloc08+1,x
        sta     scrloc08,x
        lda     scrloc09+1,x
        sta     scrloc09,x
        lda     scrloc10+1,x
        sta     scrloc10,x
        lda     scrloc11+1,x
        sta     scrloc11,x
        lda     scrloc12+1,x
        sta     scrloc12,x
        lda     scrloc13+1,x
        sta     scrloc13,x
        lda     scrloc14+1,x
        sta     scrloc14,x
        lda     scrloc15+1,x
        sta     scrloc15,x
        lda     scrloc16+1,x
        sta     scrloc16,x
        inx
        cpx     #$28
        bne     wrapmsg
        ldy     column
        lda     tab01,y         ; Pone nueva información en la columna 40 (oculta)
        sta     scrloc01+39
        lda     tab01,y
        sta     scrloc02+39
        lda     tab01,y
        sta     scrloc03+39
        lda     tab01,y
        sta     scrloc04+39
        lda     tab01,y
        sta     scrloc05+39
        lda     tab01,y
        sta     scrloc06+39
        lda     tab01,y
        sta     scrloc07+39
        lda     tab01,y
        sta     scrloc08+39
        lda     tab01,y
        sta     scrloc09+39
        lda     tab01,y
        sta     scrloc10+39
        lda     tab01,y
        sta     scrloc11+39
        lda     tab01,y
        sta     scrloc12+39
        lda     tab01,y
        sta     scrloc13+39
        lda     tab01,y
        sta     scrloc14+39
        lda     tab01,y
        sta     scrloc15+39
        lda     tab01,y
        sta     scrloc16+39
        inc     column
        lda     #$07
        sta     xfine   
nomove  rts
        ;
        ; Datos gráficos para el scroll
        ;
tab01   !byte    0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
        !byte    33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60
        !byte    61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88
        !byte    89,90,91,82,83,84,85,86,87,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112
        !byte    113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133
        !byte    134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154
        !byte    155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175
        !byte    176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196
        !byte    197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217
        !byte    218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238
        !byte    239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,32,0,0,0,0


Páginas: [1]