GFX/Logo.bmp (pak0.pak) GFX/Main.png (pak1.pak) GFX/Sky.bmp (pak1.pak) Sound/Shoot.wav (pak0.pak) Credits.txt (pak1.pak)[/quote] Los archivos contenidos en la lista siempre son los ultimos archivos leidos, si se lee un archivo ke ya existe en la lista, el antiguo se cambia por el nuevo. Es el mismo mecanimso ke usan motores como el del Quake, Quake 2, Half-Life, Quake3 o Jedi Knight 2 entre otros.
Salu2...
Interesante mecanismo ;)
CitarLos archivos contenidos en la lista siempre son los ultimos archivos leidos, si se lee un archivo ke ya existe en la lista, el antiguo se cambia por el nuevo ¿Por qué tienen prioridad los últimos leídos? No hay ningún motivo, ¿no? Supongo que lo haces simplemente por seguir un criterio.
Citar¿Por qué tienen prioridad los últimos leídos? No hay ningún motivo, ¿no? Supongo que lo haces simplemente por seguir un criterio.
Pues si, es mas por criterio ke por otra cosa, recuerda ke el motor hace una lista por orden alfabetico de los paquetes que se encuentran en el directorio, y luego genera la lista de los archivos en conjunto de todos los paquetes y lo mismo, la lista se hace leyendo los paquetes por orden alfabetico, tal y como estan en la lista anterior, de ahi la razon de por ke doy prioridad a los ultimos archivos leidos, por ke asi y tal como se leen los paquetes, asi me aseguro ke cuando kiero hacer una modificacion esta se haga, asi en vez de leer el archivo original leo el nuevo. No se exactamente como lo hara el Half-Life (por ejemplo) pero me imagino ke este usara un patron de busqueda con los *.pak, algo asi como buscar solo pak*.pak, asi solo lee pak0.pak, pak1.pak, pak2.pak, ... asegurando asi actualizaciones correctas de los archivos originales pero esto para hacer addings o plugins en un poco mas puñetero. Tal y como lo tengo yo es como funciona en el Jedi Knight 2, estan los paquetes originales (assets0.pk3, assets1.pk3, assets3.pk3, ...) pero luego tb te lee cualquier *.pk3 lleve el nombre ke lleve como por ejemplo el modelo de Luke SkyWalker ke le meti al modo multiplayer (anhluke.pk3). Si tengo ke elegir uno de los dos modos me kedo con el ke uso ahora ya ke es mas personalizable en cuanto a los nombres. Salu2...
cualqier archivo se puede sacar, al principio parece molon esconderlos del usuario, pero finalmente no merece la pena. Lo qe publiqes tiene ya una proteccion de copyright.
yo personalmente prefiero perder el tiempo denunciando y sacando pasta de gente qe use mis texturas, qe perder tiempo programando movidas raras.
sinceramente, gasta tiempo solo en temas de zipeo por compresion, no por proteccion.
x cierto a mi me horroriza lo de que haya archivos de nombres repetidos, y es algo qe yo al menos no permito que exista, eso solo da lugar a confusion.
En motores pensados para cargar mods como los quake si puede resultar util en el sentido que cargando un nuevo pak puedes reemplazar texturas originales. Lo cual aun me sigue escamando un poco..
como el asunto de las mayusculas y minusculas en archivos, nunca se lo perdonare a windows. (nooo)
que quede claro que yo no quiero denunciar a nadie por utilizar mis gráficos. En el caso del software lo pienso publicar bajo GPL ya que me parece lo mejor (por supuesto esto es cuestion de gustos), pero en el caso de los gráficos quiero protejerlos, pero no para que nadie los pueda utilizar, sino para poder utilizar mis naves sólamente yo y si alguien los quiere utilizar que me pida permiso. No es que vaya a decir que no pero quiero saber donde se ponen y para que ya que la parte gráfica es la parte que se ve de un juego (claramente) y no me gustaría que se me relacionase con otros proyectos en los que no tengo nada que ver o no me gustan.
Esto no quiere decir que nadie quiera utilizar mis gráficos, a lo mejor son una mierda y a nadie les interesa, pero si a alguien les gusta quiero ser yo quien decida si los pueden o no utilizar. También forma parte de la explotación del juego ya que si yo creo un personaje concreto para el juego no me gustaría que mi personaje sea utilizado por nadie sin mi permiso. Entiendo que esto sale fuera de la filosofía del Software Libre y es por eso por lo que no quiero dar facilidades y poder protejerlo. Está claro que el que quiera pillarlo lo podrá hacer, pero si los camuflo un poco mejor, y después los registro para que no haya problemas
Por ultimo me gustaría saber, si sabéis algo sobre esto, si puedo poner mi código bajo GPL y los gráficos bajo otra licencia que me proteja de que nadie los pueda usar sin mi permiso. Sabéis algo de esto??
saludos
Es perfectamente posible, muchos juegos son asi. http://www.eternal-lands.com/Solamente ofrece opensource el programa cliente, ni el servidor ni el arte son gpl. http://www.planeshift.it/pslicense.htmlel programa es gpl, el arte no.
Wenas. Na, que pasaba por aqui, y aprobechando pues os dejo una pregunta que viendo vuestros post os seá fácil responderla. Si meto mis imagenes (y texto y demas) en un zip (arj se puede??) o en pak, como hago luego para en el programa poder usarlo???
Tengo la ligera idea que me diréis que descomprimiendola de forma temporal en algun sitio, digase c:\TEMP, pero eso queda muy evidente, y dependiendo del tamaño de los comprimidos puede llevarle demasiado tiempo a la máquina l tener que descomprimir todo el archivo si solo quiero acceder a un archivo.
Como veis tengo dudas, algun amable veterano que me ayude??? sino al final, me quedare sin casa (nooo)
Para leer un archivo insertado en un pak, zip, rar o lo que sea, tendrás que descomprimirlo en memoria y leerlo desde ahí mismo.
Saludos.
wenas. Si, la teoría muy bonita, pero a mi me va más la práctica.....como lo descomprimo en memoria, y como le digo yo que lea un archivo en memoria, porque yo si esta en el ordenata se, si esta en memoria ya no se xDD
Pues lo de descomprimir en memoria ya se encarga la librería que utilices para ello. Esa librería tendrá una función a la que le pasas el nombre del archivo a descomprimir y te devolverá un puntero al comienzo de la zona de memoria donde está el archivo descomprimido.
Después para leerlo pues por ejemplo, en Direct3D tienes la funciones de D3DX (supongo que OpenIL también tendrá esa opción) que te cargan una imagen desde memoria. Tu le pasas el puntero y ella se encarga de cargarlo.
Pero si lo que quieres es cargarlo por tí mismo, pues todo es punteros y más punteros. Con un puntero vas recorriendo la zona de memoria donde está el archivo y vas leyendo los datos (es más o menos como leer un archivo en disco con fread, fseek, etc. Tal vez algo más complicadillo ya que los punteros se suelen atragantar :D). Eso ya es algo que es básico saber a la hora de programar.
Saludos.
Buenas. Lo primero decir que lo hago todo a mano xDD. Pero sigo sin entender como hacerlo.
Veamos, tengo un archivo (voy a hacerlo con zip, pero tambien necesitaría otros formatos, el q hablais de pak no estaría nada mal) llamado sprites.zip en el que tengo las imagenes sprites1.tga y sprites2.tga
Si hago un FILE archivoZIP = fopen("datos/sprites.zip","r"); me devolverá un puntero al archivo.....pero como lo descomprimo en memoria, y una vez q este descomprimido, como sé donde empieza el fichero sprites1.tga, y donde el sprites2.tga (de los cuales por anticipado no se el tamaño exacto, lo unico que es q estan comprimidos, pero ya tengo la funcion para descomprimirlos xDD).
No se si se me entiende la duda xDD
Pues la verdad es que no lo entiendo muy bien. ¿Quieres decir que eres capaz de descomprimir el archivo pero no sabes su tamaño?. Eso me parece bastante contradictorio.
Yo te aconsejaría que si vas a utilizar el formato zip, utilizases alguna librería para ello ya que, mas que nada, es un curro bastante gordo crearse uno mismo las funciones de descompresión para el formato zip. Además, con estas librerías no sólo se te devuelve el archivo descomprimido en memoria sino que también te devuelve el tamaño del mismo.
Saludos.
Por cierto, como tampoco es cuestión de que te diga cómo se hace un manager de archivos zip, te aconsejo, si quieres saber cómo hacerlo, que te descargues el código fuente de las herramientas del quake3. Ahí verás que hay una librería (con el código fuente) y código para utilizar esa librería. Lo puedes descargar de aquí (creo que ese es el archivo). Saludos.
Buenas. Lo siento, pero debí de escribil mal y te llevé a confusión. En ningun momento he querido decir que sepa como descomprimir el zip en memoria, simplemente he expresado mis desconocimientos y no he sabido hacer la pregunta.
Actualmente mi proyecto accede a las imagenes directamente, manteniendo subcarpetas para tenerlo un poco "ordenado". Al ver este post me pareció muy buena idea la de poder introducir archivos de información similar en un unico archivo (lo de zip era un ejemplo, por lo q leo tirare más por los paq por eso de ser mas usado xDD).
Segun he leido hay que leer el archivo en memoria, descomprimirlo en memoria, y acceder a la imagen en memoria, de ahi vienes mis dudas.
1) Abrir el archivo y volvarlo a memoria. Fenomenal, un fopen, y un fread que lea todo el archivo y lo lleve a un char*.
2) Descomprimir en memoria (ni idea xDD)
3) Acceder a las imagenes en memoria (ni idea xDD)
En mi anterior post me salte directamente al tercer punto, lo q te llevo a error xDD
Cual librería me recomendais para esto??
GRACIAS
Ya que te pones a meter las cosas en un "pak", ¿por qué no utilizar compresión?. Al fin y al cabo, con la ayuda de una librería es lo mismo que si metieras tus archivos en un "pak" sin compresión.
Con respecto a la librería, depende de qué formato quieras. Si quieres utilizar zip, utiliza la zlib o la que viene con el código fuente de las herramientas del quake3. Si vas a utilizar rar, píllate la librería unrarlib.
Con respecto a cómo descomprimir en memoria, depende. Si vas a utilizar un "pak" sin compresión no necesitas descomprimir nada, sólamente saber en que posicón dentro del "pak" comienza el archivo a extraer y qué tamaño tiene. Con eso haces un fseek para posicionarte en la posición correcta dentro del "pak" y haces un fread de tantos bytes como tamaño tenga el archivo. Pero si utilizas una librería como las que te he dicho, te olvidas de todo esto. La librería se encarga de ese trabajo.
Leyendo el punto número 1, me hace pensar que estás confundido. A ver, lo que tienes que cargar en memoria no es todo el pak (sería una barbaridad teniendo en cuenta que podría llegar a ocupa un capazo de megas) sino solamente el archivo que necesites (una imagen, un script, un sonido, etc).
Y finalmente, con respecto a lo de leer cosas en memoria, lo único que te puedo aconsejar es que te leas, en algún libro o tutorial en internet, el tema de punteros y cómo utilizarlos para desplazarse en una zona de memoria.
Saludos.
Wenas. Creo que porfin empezamos a entendernos xDD.
La verdad el proyecto esta en una fase demasiado temprana como para empezar a hacer este tipo de cosas, pero tomo nota. Lo más seguro utilizaré alguna libreria (de codigo libre, porsupuesto) a poder ser de arj que me gusta más xDD
Muchas gracias a todos por vuestros comentarios ^_^
Los programadores creo que ya te han solventado las dudas (o están en ello). Filosofeando un poco te diría que te olvides de ponerle "las cosas difíciles" al usuario. Si no quieres que usen tus imágenes sin tu permiso, simplemente pon un letrerito en el ejecutable que ponga "envíame un mail a tal si quieres usar las imágenes para tu proyecto". Total, el que lo quiera hacer lo va a hacer igual, así que ¿para qué complicarse mutuamente la vida?
Un saludo GPL.
Wenas ^_^
Mars, gracias por tu comentario. En parte creo que tienes razón, que es liarse las cosas. Pero por otra parte siempre jode ver tus imagenes por ahi sin tu saberlo.
Y aparte, yo más lo hago por comodidad que por otra cosa. Estoy intentando hacer un rpg en 2d basado en tiles sin usar el típico rpgmaker. Me será mucho más fácil si cada.....área, o mapa.....sus sprites, textos y demás, estan todos en un pak diferente (evidentemente, esto facilitaría las cosas, puesto que todos los archivos podrían tener el mismo nombre en sus respectivos pak). Cierto es q lo mismo es con directorios, pero siempre queda mejor un .miextensionfavorita que un directorio con muchos archivos (que ademas esto consume mucho mas hd......he llegado a ver una carpeta que ocupaba menos de 30 megas, pero espacio ocupado en disco cerca de 1 giga, me quede (uoh) ).
SALUDOS (ole)
|