base:kick_assembler_macros
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | Last revisionBoth sides next revision | ||
base:kick_assembler_macros [2015-05-31 21:35] – [Load Multicolor Koala format straight from .png file] tww | base:kick_assembler_macros [2016-08-10 01:42] – tww_ctr | ||
---|---|---|---|
Line 6: | Line 6: | ||
< | < | ||
===== Graphics conversion ===== | ===== Graphics conversion ===== | ||
+ | |||
+ | ==== " | ||
+ | |||
+ | By: TWW/CTR | ||
+ | |||
+ | This macro takes a .PNG file and converts it into a 2x2 tile based bitmap(koala) format. | ||
+ | |||
+ | You need to set the **Palette and the background color** inside the macro (make sure these are correct) and then call the macro with the filname and output location of the data in memory as follows: | ||
+ | |||
+ | < | ||
+ | : | ||
+ | </ | ||
+ | |||
+ | Here follows the Macro: | ||
+ | |||
+ | < | ||
+ | .macro BitmapPack (FileName, | ||
+ | |||
+ | .function RGB_Sum(argument1, | ||
+ | .return argument1 * 65536 + argument2 * 256 + argument3 | ||
+ | } | ||
+ | |||
+ | .var RGB_Index = Hashtable().put( | ||
+ | RGB_Sum($00, | ||
+ | RGB_Sum($ff, | ||
+ | RGB_Sum($92, | ||
+ | RGB_Sum($00, | ||
+ | RGB_Sum($00, | ||
+ | RGB_Sum($72, | ||
+ | RGB_Sum($48, | ||
+ | RGB_Sum($00, | ||
+ | RGB_Sum($00, | ||
+ | RGB_Sum($00, | ||
+ | RGB_Sum($00, | ||
+ | RGB_Sum($00, | ||
+ | RGB_Sum($8a, | ||
+ | RGB_Sum($00, | ||
+ | RGB_Sum($00, | ||
+ | RGB_Sum($00, | ||
+ | ) | ||
+ | |||
+ | .const BG_Color | ||
+ | .const BackgroundColor = RGB_Index.get(BG_Color) | ||
+ | .const BlockSizeX | ||
+ | .const BlockSizeY | ||
+ | .const RawImage | ||
+ | .const ImageBlocksX | ||
+ | .const ImageBlocksY | ||
+ | |||
+ | .var void = 0 // Empty value used to call funtions without any return | ||
+ | .var PixelPosX | ||
+ | .var PixelPosY | ||
+ | .var BlockNumber | ||
+ | .var FinalBMP | ||
+ | .var Final0400 | ||
+ | .var FinalD800 | ||
+ | .var FinalMap | ||
+ | .var DiscoveredBlocks = Hashtable() | ||
+ | |||
+ | .for (n = 0 ; n < ImageBlocksY ; n++) { | ||
+ | .for (j = 0 ; j < ImageBlocksX ; j++) { | ||
+ | .var BlockDataBMP | ||
+ | .var BlockData0400 | ||
+ | .var BlockDataD800 | ||
+ | .var BlockStructure | ||
+ | .for (i = 0 ; i < 4 ; i++) { // Start to decode 1 charblock | ||
+ | .var CharColors | ||
+ | .var CharColors2 | ||
+ | .eval CharColors | ||
+ | .eval CharColors2 | ||
+ | .for (y = 0 ; y < 8 ; y++) { | ||
+ | .var BitMask = 0 | ||
+ | .for (x = 0 ; x < 4 ; x++) { | ||
+ | .var RGB_Value = RawImage.getPixel(PixelPosX+x*2, | ||
+ | .if ([RGB_Value!=BackgroundColor]&& | ||
+ | .eval CharColors.put(RGB_Value, | ||
+ | .eval CharColors2.put(CharColors2.keys().size(), | ||
+ | } | ||
+ | .eval BitMask=BitMask|[CharColors.get(RGB_Value)*64]>> | ||
+ | } | ||
+ | .eval BlockDataBMP.add(BitMask) | ||
+ | } | ||
+ | .if (CharColors.keys().size() == 1) { | ||
+ | .eval BlockData0400.add(BG_Color) | ||
+ | .eval BlockDataD800.add(BG_Color|BG_Color<< | ||
+ | } | ||
+ | .if (CharColors.keys().size() == 2) { | ||
+ | .eval BlockData0400.add(RGB_Index.get(CharColors2.get(1))|BG_Color<< | ||
+ | .eval BlockDataD800.add(BG_Color) | ||
+ | } | ||
+ | .if (CharColors.keys().size() == 3) { | ||
+ | .eval BlockData0400.add(RGB_Index.get(CharColors2.get(1))|RGB_Index.get(CharColors2.get(2))<< | ||
+ | .eval BlockDataD800.add(BG_Color) | ||
+ | } | ||
+ | .if (CharColors.keys().size() == 4) { | ||
+ | .eval BlockData0400.add(RGB_Index.get(CharColors2.get(1))|RGB_Index.get(CharColors2.get(2))<< | ||
+ | .eval BlockDataD800.add(RGB_Index.get(CharColors2.get(3))) | ||
+ | } | ||
+ | .if (i==0) .eval PixelPosX = PixelPosX + 8 | ||
+ | .if (i==1) .eval PixelPosX = PixelPosX - 8 .eval PixelPosY = PixelPosY + 8 | ||
+ | .if (i==2) .eval PixelPosX = PixelPosX + 8 | ||
+ | .if (i==3) .eval PixelPosX = PixelPosX + 8 .eval PixelPosY = PixelPosY - 8 | ||
+ | } | ||
+ | .eval BlockStructure.add(BlockDataBMP, | ||
+ | .var DoesTheBlockExists = DiscoveredBlocks.get(BlockStructure) | ||
+ | .if (DoesTheBlockExists == null) { | ||
+ | .eval DiscoveredBlocks.put(BlockStructure, | ||
+ | .eval DoesTheBlockExists = BlockNumber | ||
+ | .eval BlockNumber = BlockNumber + 1 | ||
+ | .eval FinalBMP.addAll(BlockDataBMP) | ||
+ | .eval Final0400.addAll(BlockData0400) | ||
+ | .eval FinalD800.addAll(BlockDataD800) | ||
+ | } | ||
+ | .eval FinalMap.add(DoesTheBlockExists) | ||
+ | } | ||
+ | .eval PixelPosX = 0 | ||
+ | .eval PixelPosY = PixelPosY + 16 | ||
+ | } | ||
+ | .pc = Destination "Level 1 - Bitmap Tile Graphics" | ||
+ | .fill FinalBMP.size(), | ||
+ | .pc = * "Level 1 - Tile Screen Colors" | ||
+ | .fill Final0400.size(), | ||
+ | .pc = * "Level 1 - Tile $d800 Colors" | ||
+ | .fill FinalD800.size(), | ||
+ | .pc = * "Level 1 - Map" | ||
+ | .fill FinalMap.size(), | ||
+ | } // end macro | ||
+ | </ | ||
==== Load Multicolor Koala format straight from .png file ==== | ==== Load Multicolor Koala format straight from .png file ==== |
base/kick_assembler_macros.txt · Last modified: 2016-08-10 02:24 by tww_ctr