Sobre paletas de 8 bits

Started by La momia que fuma, December 01, 2009, 07:49:45 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

La momia que fuma

Que tal chavales? Vereis, lo que necesitaría hacer es modificar un color concreto en una paleta, y no me doy yo cuenta de si hay alguna función específica para eso...lo unico que se me ocurre es hacer otra paleta que reflejen el cambios en ese color y asignarla, pero no me parece muy optimo que digamos (Además lo que pretendo hacer es muchos cambios continuados, para hacer un efecto de suelo electrificado, asi que necesitaria mogollón de paletas...por no hablar de si al final me da por hacer esta operación en dos colores a la vez, que cambien de forma independiente uno del otro...)

Sugerencias?

darío

El moddesc de mod_map da algunas funciones que a lo mejor alguna sirve para lo que tu quieres, aunque hay varias que no conocía... lo malo es que a partir de aquí no puedo decir mucho más...

INT PAL_NEW()
INT PAL_DEL(INTEGER)
INT PAL_UNLOAD(INTEGER)
INT PAL_CLONE(INTEGER)
INT PAL_REFRESH()
INT PAL_REFRESH(INTEGER)
INT PAL_MAP_GETID(INTEGER, INTEGER)
INT PAL_MAP_ASSIGN(INTEGER, INTEGER, INTEGER)
INT PAL_MAP_REMOVE(INTEGER, INTEGER)
INT PAL_GET(INTEGER, INTEGER, POINTER)
INT PAL_GET(INTEGER, INTEGER, INTEGER, POINTER)
INT PAL_SYS_SET(INTEGER)
INT PAL_SYS_SET(POINTER)
INT PAL_SET(INTEGER, INTEGER, POINTER)
INT PAL_SET(INTEGER, INTEGER, INTEGER, POINTER)
INT PAL_SAVE(STRING)
INT PAL_SAVE(STRING, INTEGER)
INT PAL_LOAD(STRING)
INT COLORS_SET(INTEGER, INTEGER, POINTER)
INT COLORS_SET(INTEGER, INTEGER, INTEGER, POINTER)
INT COLORS_GET(INTEGER, INTEGER, POINTER)
INT COLORS_GET(INTEGER, INTEGER, INTEGER, POINTER)
INT PALETTE_ROLL(INTEGER, INTEGER, INTEGER)
INT PALETTE_CONVERT(INTEGER, INTEGER, POINTER)
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

DjSonyk

Creo que la que te viene bastante bien es Palete_Roll.Los parametros son Color inicial,numero de colores e incremento.
Te rota una gama de colores de la paleta,desde el color inicial hasta el numero que introduzcas como numero de colores el incremento es para pasar de un color a otro,evidentemente con esos colores no podras usar en otros graficos pues tambien se les rotaria.

Prg

es sencillo, en los ejmplos de bennu viene c'omo hacerlo

http://betatester.bennugd.org/snapshot/samples/palettes.rar

yo use esos ejemplos para hacer el editor de paletas, te haces una matriz de estructuras rgb y ahi almacenas la paleta, luego modificas el color deceado y por ultimo haces que la paleta tome los colores de la matriz, es una forma, pero hay m'as. la rotaci'on de colores tendr'ias que tener los colores juntos (el 100 al 103) y al aplicarle la rotaci'on, los colores se intercambian de lugar generando ilusion de movimiento.

es el ejemplo rbear8-5
es algo as'i
pal_set(pal_normal,7,7,&pal_verde_data);    // colores 7 a 13
               pal_refresh(pal_normal);

donde
byte pal_verde_data[21] =
                               0, 80,0,
                               0,110,0,
                               0,140,0,
                               0,170,0,
                               0,190,0,
                               0,220,0,
                               0,250,0;
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Windgate

#4
Me gustaría aprender a usar paletas... Las conocí en DIV cuando era niño y me daban mucho miedo, por las noches no dormía... Y en Bennu no me he molestado en mirarlas, a costa de tener FPGs de 16 bits con gráficos que apenas tienen 16 colores distintos :-\

Voy a echar un vistazo al ejemplo que propones Prg

EDIT: Buen ejemplo, pero al abrir los FPG de 8 bits el FPG Edit 2009 me da error, ¿Qué cosa puede ser?

Veo que es rápido y eficaz el uso de paletas y puede dar mucho juego, sigo investigando, buen ejemplazo!

EDIT: Tampoco estaba al corriente de que pallete era variable LOCAL :o veo que es fácil. También veo que habría que hacer una compilación de Bennu eliminando casi todas las LOCAL para Bennu 3D, ya que ocupan espacio para nada :/
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DjSonyk

Quote from: Windgate on December 02, 2009, 01:50:19 PM
Me gustaría aprender a usar paletas... Las conocí en DIV cuando era niño y me daban mucho miedo, por las noches no dormía...

¿Que nos insinuas que ahora eres un anciano.? xD

Yo estado mirando en la Wikipedia lo de las paletas pero no vi nada,al menos no todo lo que puso dario,vi load ,unloag y poco mas...
El ejemplo de PRG quedaria asi cambias lo colores de la paleta del 7 al 13... con los colores rgb (0,80,0)...ect, en el caso del ejemplo cambiaria el color 7 por un verde oscuro , 0 de rojo,80 de verde,0 azul...no se si asi se entiende un poco mas pero vamos que es facilisimo....

La momia que fuma

#6
Wow, cuanta info  ;D, gracias compañeros, voy a ver si me las apaño

EDIT: Imagino que los tiros iran por usar color_set, pero a saber como se usa, no viene en la wiki ni en los ejemplos @_@

Windgate

Oh, lo del 7 al 13 se refiere a colores de al paleta, eso era algo que no entendía, gracias también xD

Sí que he probado a añadir algún color nuevo en los ejemplos y sin problemas, pero por ejemplo:

Ahora tengo aquí un FPG con un Sonic muy chulo, y me gustaría poder modificar su paleta de colores. Es un FPG de 16 bits, ¿Sería posible?

Por ejemplo no sé cómo puedo sacar la paleta asociada a un fpg.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Drumpi

pal_set es como el antiguo "set_colors" de Fenix/Div. El primer parámetro es la paleta destino, el segundo es el primer color de la paleta que quieres cambiar, el tercero el número de colores (a partir del mencionado) que quieres modificar, y después una dirección de memoria a un array que contiene los nuevos valores de color (puede ser un array de tipo byte que contenga 3*número de colores a cabiar, con los valores RGB de cada color nuevo).

Prg ha puesto un buen ejemplo.

Los FPG de 16 bits no tienen paleta, por lo que no se pueden cambiar sus colores sin modificar el mapa (para lo cual, cree un bonito programa que lo hace por nosotros... aunque no carga FPG (tendríais que usar FPGEdit para exportarlos todos)

La paleta asociada a un FPG de 8bit se puede extraer mediante LOAD_PAL, poniendo la dir del FPG en lugar de la dir de una PAL, luego, si quereis la podeis salvar con save_pal o similar.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

BoMbErLiNk

Para el cambio de colores en un fpg de 16bits además existe la FGFX.dll (creo que tu momia ya las has usado  ;D), que reemplaza un color por otro con bastante comodidad con un rendimiento en tiempo real aceptable, por supuesto no tiene ninguna ventaja sobre mapas de menos de 256 colores y más ahora que se permite paleta/proceso.

Windgate

fgfx.dll no la conocía, nos salen las dll por debajo de las piedras xD

Es un bonito mundo el de las paletas, pero de momento no me resulta útil, dejaré las paletas para otro momento... Ya sé que en este hilo tengo toda la info necesaria :P
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es