User Tools

Site Tools


base:kick_assembler_macros

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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] twwbase:kick_assembler_macros [2016-08-10 01:42] tww_ctr
Line 6: Line 6:
 <code>:MacroName(Parameter1, Parameter2, Parameter3)</code> <code>:MacroName(Parameter1, Parameter2, Parameter3)</code>
 ===== Graphics conversion ===== ===== Graphics conversion =====
 +
 +==== "Char"Pack straight from .PNG file (Bitmap Format) ====
 +
 +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:
 +
 +<code>
 +    :BitmapPack("map.png", $8000)
 +</code>
 +
 +Here follows the Macro:
 +
 +<code>
 +    .macro BitmapPack (FileName,Destination) {
 +
 +        .function RGB_Sum(argument1,argument2,argument3) {     // Function to calculate RGB colors
 +            .return argument1 * 65536 + argument2 * 256 + argument3
 +        }
 +
 +        .var RGB_Index = Hashtable().put(                      // Define the palette
 +            RGB_Sum($00,$00,$00), 0,   // Black
 +            RGB_Sum($ff,$ff,$ff), 1,   // White
 +            RGB_Sum($92,$4a,$40), 2,   // Red
 +            RGB_Sum($00,$00,$01), 3,   // Cyan
 +            RGB_Sum($00,$00,$01), 4,   // Purple
 +            RGB_Sum($72,$b1,$4b), 5,   // Green
 +            RGB_Sum($48,$3a,$aa), 6,   // Blue
 +            RGB_Sum($00,$00,$01), 7,   // Yellow
 +            RGB_Sum($00,$00,$01), 8,   // Light Brown
 +            RGB_Sum($00,$00,$01), 9,   // Dark Brown
 +            RGB_Sum($00,$00,$01), 10,  // Light Red
 +            RGB_Sum($00,$00,$01), 11,  // Dark Grey
 +            RGB_Sum($8a,$8a,$8a), 12,  // Grey
 +            RGB_Sum($00,$00,$01), 13,  // Light Green
 +            RGB_Sum($00,$00,$01), 14,  // Light Blue
 +            RGB_Sum($00,$00,$01), 15   // Light Grey
 +        )
 +
 +        .const BG_Color        = 0                             // User selected Background Color
 +        .const BackgroundColor = RGB_Index.get(BG_Color)       // Set the background RGB color
 +        .const BlockSizeX      = 16                            // X Size of each block in Single Color Pixels
 +        .const BlockSizeY      = 16                            // Y Size of each block in Single Color Pixels
 +        .const RawImage        = LoadPicture(FileName,List())  // Loads the map into the list RawImage
 +        .const ImageBlocksX    = RawImage.width/BlockSizeX     // Sets the map size in X
 +        .const ImageBlocksY    = RawImage.height/BlockSizeY    // Sets the map size in Y
 +
 +        .var void             = 0                              // Empty value used to call funtions without any return
 +        .var PixelPosX        = 0                              // Global Block Pointer X
 +        .var PixelPosY        = 0                              // Global Block Pointer Y
 +        .var BlockNumber      = 0                              // Keeps track of numbers for new blocks
 +        .var FinalBMP         = List()
 +        .var Final0400        = List()
 +        .var FinalD800        = List()
 +        .var FinalMap         = List()
 +        .var DiscoveredBlocks = Hashtable()                    // Keeps track of earlier discovered blocks
 +
 +        .for (n = 0 ; n < ImageBlocksY ; n++) {
 +            .for (j = 0 ; j < ImageBlocksX ; j++) {
 +                .var BlockDataBMP     = List()
 +                .var BlockData0400    = List()
 +                .var BlockDataD800    = List()
 +                .var BlockStructure   = List()
 +                .for (i = 0 ; i < 4 ; i++) {          // Start to decode 1 charblock
 +                    .var CharColors       = Hashtable()
 +                    .var CharColors2      = Hashtable()
 +                    .eval CharColors      .put(BackgroundColor, 0)
 +                    .eval CharColors2     .put(0, BackgroundColor)
 +                    .for (y = 0 ; y < 8 ; y++) {
 +                        .var BitMask = 0
 +                        .for (x = 0 ; x < 4 ; x++) {
 +                            .var RGB_Value = RawImage.getPixel(PixelPosX+x*2,PixelPosY+y)
 +                            .if ([RGB_Value!=BackgroundColor]&&[CharColors.containsKey(RGB_Value) != true]) {
 +                                .eval CharColors.put(RGB_Value,CharColors.keys().size())
 +                                .eval CharColors2.put(CharColors2.keys().size(),RGB_Value)
 +                            }
 +                            .eval BitMask=BitMask|[CharColors.get(RGB_Value)*64]>>x*2
 +                        }
 +                        .eval BlockDataBMP.add(BitMask)
 +                    }
 +                    .if (CharColors.keys().size() == 1) {
 +                        .eval BlockData0400.add(BG_Color)
 +                        .eval BlockDataD800.add(BG_Color|BG_Color<<4)
 +                    }
 +                    .if (CharColors.keys().size() == 2) {
 +                        .eval BlockData0400.add(RGB_Index.get(CharColors2.get(1))|BG_Color<<4)
 +                        .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))<<4)
 +                        .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))<<4)
 +                        .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,BlockData0400,BlockDataD800)
 +                .var DoesTheBlockExists = DiscoveredBlocks.get(BlockStructure)
 +                .if (DoesTheBlockExists == null) {
 +                    .eval DiscoveredBlocks.put(BlockStructure,BlockNumber)
 +                    .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(),FinalBMP.get(i)
 +        .pc = * "Level 1 - Tile Screen Colors"
 +        .fill Final0400.size(),Final0400.get(i)
 +        .pc = * "Level 1 - Tile $d800 Colors"
 +        .fill FinalD800.size(),FinalD800.get(i)
 +        .pc = * "Level 1 - Map"
 +        .fill FinalMap.size(),FinalMap.get(i)
 +    }  // end macro
 +</code>
  
 ==== 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