{"id":2508,"date":"2020-07-16T13:48:17","date_gmt":"2020-07-16T11:48:17","guid":{"rendered":"https:\/\/www.maiuscentral.com\/jrs\/?p=2508"},"modified":"2020-07-16T13:48:17","modified_gmt":"2020-07-16T11:48:17","slug":"creando-un-juego-para-msx","status":"publish","type":"post","link":"https:\/\/www.maiuscentral.com\/jrs\/2020\/07\/16\/creando-un-juego-para-msx\/","title":{"rendered":"Creando un juego para MSX"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Desde hace tiempo que tengo en mente crear un juego para m\u00e1quinas #MSX. Obviamente, un juego con \u00abfunny cartoon animals\u00bb, esto es, \u00abfurries\u00bb. Y despu\u00e9s de m\u00e1s de 90 d\u00edas encerrado en casa (update: ahora ya m\u00e1s de 130), al final me he puesto a aprender c\u00f3mo funciona la arquitectura de tal computador antiguo, y las cosas empiezan a funcionar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(NOTA: Voy a volcar ahora todo lo que he ido publicando en Twitter, para que quede noticia y constancia fuera de la vor\u00e1gine de contenido de esa red social, y que esto lo reciban la gente que me sigue por RSS)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/concept_art-1024x768.png\" alt=\"\" class=\"wp-image-2521\" srcset=\"https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/concept_art-1024x768.png 1024w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/concept_art-300x225.png 300w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/concept_art-768x576.png 768w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/concept_art-1536x1152.png 1536w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/concept_art.png 1600w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption>\u00abConcept Art\u00bb de principios de Enero<\/figcaption><\/figure>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Todo empieza en la \u00faltima Reuni\u00f3n de Usuarios de MSX en Barcelona (RUMSX de Enero 2020), donde conoc\u00ed gente incre\u00edble desarrollando juegos para esa m\u00e1quina, que a\u00fan ser antigua y tener m\u00e1s a\u00f1os que yo, siguen creando contenido con sus limitados recursos de CPU, memoria y sonido. As\u00ed que decid\u00ed empezar a crear un juego tambi\u00e9n. A partir de manuales de referencia, lo primero fue crear una biblioteca de funciones b\u00e1sica (la \u00abcore library\u00bb) en Ensamblador y en C, y a partir de ah\u00ed empezar a construir el juego. Mencionar que <a href=\"https:\/\/twitter.com\/PresidentFubu\">@PresidentFubu<\/a> est\u00e1 detr\u00e1s de esto, d\u00e1ndome enlaces a ejemplos de MSX y m\u00e1s cosas.<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200612_142817051-scaled-1.jpg\"><img decoding=\"async\" src=\"https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200612_142817051-1024x768.jpg\" alt=\"\" data-id=\"2509\" data-full-url=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200612_142817051-scaled-1.jpg\" data-link=\"https:\/\/www.maiuscentral.com\/jrs\/?attachment_id=2509\" class=\"wp-image-2509\"\/><\/a><figcaption class=\"blocks-gallery-item__caption\">Prueba de ventanas, cargando un BMP<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200612_142832570-scaled-1.jpg\"><img decoding=\"async\" src=\"https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200612_142832570-1024x768.jpg\" alt=\"\" data-id=\"2510\" data-full-url=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200612_142832570-scaled-1.jpg\" data-link=\"https:\/\/www.maiuscentral.com\/jrs\/?attachment_id=2510\" class=\"wp-image-2510\"\/><\/a><figcaption class=\"blocks-gallery-item__caption\">Pantalla de Debug<\/figcaption><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed algunos ejemplos de la creaci\u00f3n de personajes, usando una paleta de 16 colores, con 4 bits por pixel en modo \u00abScreen 5\u00bb (o \u00abGraphics 4\u00bb). Solo tengo 32KBytes para almacenar c\u00f3digo, gr\u00e1ficos y m\u00fasica (update: he conseguido ampliarlo a 48KB), por tanto se deben comprimir las im\u00e1genes como \u00abtiles\u00bb, incluso aunque el modo de pantalla 5 est\u00e9 orientado a mapas de bits (Bit Map Picture).<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200421_204147144_BURST000_COVER_TOP-scaled-1.jpg\"><img decoding=\"async\" src=\"https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200421_204147144_BURST000_COVER_TOP-1024x768.jpg\" alt=\"\" data-id=\"2512\" data-full-url=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200421_204147144_BURST000_COVER_TOP-scaled-1.jpg\" data-link=\"https:\/\/www.maiuscentral.com\/jrs\/?attachment_id=2512\" class=\"wp-image-2512\"\/><\/a><figcaption class=\"blocks-gallery-item__caption\">Coneja amazona<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200527_223552129-scaled-1.jpg\"><img decoding=\"async\" src=\"https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200527_223552129-1024x768.jpg\" alt=\"\" data-id=\"2511\" data-full-url=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200527_223552129-scaled-1.jpg\" data-link=\"https:\/\/www.maiuscentral.com\/jrs\/?attachment_id=2511\" class=\"wp-image-2511\"\/><\/a><figcaption class=\"blocks-gallery-item__caption\">Creando personajes, pixel a pixel<\/figcaption><\/figure><\/li><\/ul><\/figure>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Primeros avances: Jugando con la VideoRAM, ya puedo subir dise\u00f1os codificados no como BMP, sino como composici\u00f3n de \u00abtiles\u00bb, que ocupa menos pero requiere un tiempo para procesar y subir a VRAM. Para ello tengo que hacer pruebas de mover los datos a RAM, montar las im\u00e1genes, y subirlas a VRAM, usando una extensi\u00f3n que he preparado para la \u00abcore library\u00bb con \u00abtile functions\u00bb y \u00abmemory heap\u00bb.<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200530_202822063-1024x768.jpg\"><img decoding=\"async\" src=\"https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200530_202822063-1024x768.jpg\" alt=\"\" data-id=\"2513\" class=\"wp-image-2513\"\/><\/a><figcaption class=\"blocks-gallery-item__caption\">Personajes principales<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200604_225727197b-scaled-1.jpg\"><img decoding=\"async\" src=\"https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200604_225727197b-1024x768.jpg\" alt=\"\" data-id=\"2514\" data-full-url=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200604_225727197b-scaled-1.jpg\" data-link=\"https:\/\/www.maiuscentral.com\/jrs\/?attachment_id=2514\" class=\"wp-image-2514\"\/><\/a><figcaption class=\"blocks-gallery-item__caption\">Personajes ya subidos en VRAM<\/figcaption><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Segundo avance: Poner escenarios de fondo, que ser\u00e1n mayores que los BMPs de personaje, pero que pueden ser m\u00e1s simples. Para ello uso m\u00e1ximo 3 tipos de \u00abtile\u00bb, cada una con 1 color + transparencia, que simplifica los bits necesarios para codificar la imagen entera. Y tambi\u00e9n permite que usando compresi\u00f3n Huffman y simetr\u00eda, un fondo ocupe m\u00e1ximo 150 Bytes (si fuera un bitmap ocupar\u00eda 450Bytes).<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535987_screenshot-1024x548.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"548\" src=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535987_screenshot-1024x548.png\" alt=\"\" data-id=\"2515\" class=\"wp-image-2515\" srcset=\"https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535987_screenshot-1024x548.png 1024w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535987_screenshot-300x161.png 300w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535987_screenshot-768x411.png 768w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535987_screenshot.png 1121w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><figcaption class=\"blocks-gallery-item__caption\">Escenario descomprimido en VRAM<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200702_192106966b-scaled-1.jpg\"><img decoding=\"async\" src=\"https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200702_192106966b-1024x768.jpg\" alt=\"\" data-id=\"2516\" data-full-url=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200702_192106966b-scaled-1.jpg\" data-link=\"https:\/\/www.maiuscentral.com\/jrs\/?attachment_id=2516\" class=\"wp-image-2516\"\/><\/a><figcaption class=\"blocks-gallery-item__caption\">Codificando la imagen a mano<\/figcaption><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s, en otro orden de cosas, estoy creando m\u00e1s personajes. Aqu\u00ed intent\u00e9 crear una chinchilla, pero me sali\u00f3 un h\u00e1mster&#8230; Y estoy probando diferentes paletas de colores para el personaje, y que la diferencien bien del resto.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/pbs.twimg.com\/media\/EcKICpMXQAAys1_?format=png&amp;name=large\" alt=\"Image\"\/><figcaption>Versiones de paleta para el mismo personaje<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tercer avance: He estado ocupado con expandir la \u00abcore library\u00bb para poder usar una tercera p\u00e1gina de ROM (+16KB), y ahora la ROM permite 48KB definitivamente, donde puedo usar 16KB enteros para im\u00e1genes y sonido!<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_charab.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"483\" src=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_charab-1024x483.png\" alt=\"\" data-id=\"2519\" data-full-url=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_charab.png\" data-link=\"https:\/\/www.maiuscentral.com\/jrs\/?attachment_id=2519\" class=\"wp-image-2519\" srcset=\"https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_charab-1024x483.png 1024w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_charab-300x142.png 300w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_charab-768x362.png 768w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_charab-1536x725.png 1536w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_charab.png 1643w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><figcaption class=\"blocks-gallery-item__caption\">Personajes listos<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_chara2b-1024x634.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"634\" src=\"https:\/\/www.maiuscentral.com\/jrs2\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_chara2b-1024x634.png\" alt=\"\" data-id=\"2518\" data-link=\"https:\/\/www.maiuscentral.com\/jrs\/?attachment_id=2518\" class=\"wp-image-2518\" srcset=\"https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_chara2b-1024x634.png 1024w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_chara2b-300x186.png 300w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_chara2b-768x476.png 768w, https:\/\/www.maiuscentral.com\/jrs\/wp-content\/uploads\/2020\/07\/IMG_20200703_172535988_chara2b.png 1233w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><figcaption class=\"blocks-gallery-item__caption\">Personajes cargados desde \u00abPage_0\u00bb<\/figcaption><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ir\u00e9 informando de m\u00e1s avances, a medida que el desarrollo avance.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Hasta pronto!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Desde hace tiempo que tengo en mente crear un juego para m\u00e1quinas #MSX. Obviamente, un juego con \u00abfunny cartoon animals\u00bb, esto es, \u00abfurries\u00bb. Y despu\u00e9s de m\u00e1s de 90 d\u00edas encerrado en casa (update: ahora ya m\u00e1s de 130), al final me he puesto a aprender c\u00f3mo funciona la arquitectura de tal computador antiguo, y &hellip; <a href=\"https:\/\/www.maiuscentral.com\/jrs\/2020\/07\/16\/creando-un-juego-para-msx\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \u00abCreando un juego para MSX\u00bb<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[2],"tags":[12,13],"class_list":["post-2508","post","type-post","status-publish","format-standard","hentry","category-jrsblog","tag-desarrollo","tag-msx"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.maiuscentral.com\/jrs\/wp-json\/wp\/v2\/posts\/2508","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.maiuscentral.com\/jrs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.maiuscentral.com\/jrs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.maiuscentral.com\/jrs\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.maiuscentral.com\/jrs\/wp-json\/wp\/v2\/comments?post=2508"}],"version-history":[{"count":0,"href":"https:\/\/www.maiuscentral.com\/jrs\/wp-json\/wp\/v2\/posts\/2508\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.maiuscentral.com\/jrs\/wp-json\/wp\/v2\/media?parent=2508"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.maiuscentral.com\/jrs\/wp-json\/wp\/v2\/categories?post=2508"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.maiuscentral.com\/jrs\/wp-json\/wp\/v2\/tags?post=2508"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}