Skip to content

Commit

Permalink
-force implementation part 1
Browse files Browse the repository at this point in the history
  • Loading branch information
TricksterGuy committed Jan 22, 2015
1 parent a3799c8 commit b76400e
Show file tree
Hide file tree
Showing 12 changed files with 680 additions and 391 deletions.
6 changes: 0 additions & 6 deletions cli/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -211,12 +211,6 @@ IMPLEMENT_APP_NO_MAIN(Nin10KitApp);

int main(int argc, char** argv)
{
/*if (MagickCore::ExpandFilenames(&argc, &argv) == MagickCore::MagickFalse)
FatalLog("Unable to expand filenames");
for (int i = 0; i < argc+1; i++)
InfoLog(argv[i]);*/

Magick::InitializeMagick(*argv);
cpercep_init();

Expand Down
121 changes: 116 additions & 5 deletions gui/imageutil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ extern ExportParams params;

void DefaultParams()
{
params.transparent_color = -1;
params.transparent_color = Color(0, 0, 0);
params.transparent_given = false;
params.dither_level = 10 / 100.0f;
params.offset = 0;
params.palette = 256;
params.border = 0;
params.force = true;
}

ImageInfo::ImageInfo(const std::string& _filename) : filename(_filename)
Expand Down Expand Up @@ -45,9 +47,20 @@ void ConvertToMode4(std::map<std::string, ImageInfo>& images, std::vector<Image8
DefaultParams();
std::vector<Image16Bpp> images16;
ConvertToMode3(images, images16);
//Image8BppScene scene(images16, "");
//for (unsigned int i = 0; i < scene.NumImages(); i++)
images8.emplace_back(images16[0]);
Image8BppScene scene(images16, "");
for (unsigned int i = 0; i < scene.NumImages(); i++)
images8.emplace_back(scene.GetImage(i));
}

void ConvertToMode0(std::map<std::string, ImageInfo>& images, std::vector<Map>& maps, int bpp)
{
DefaultParams();
params.bpp = bpp;
std::vector<Image16Bpp> images16;
ConvertToMode3(images, images16);
MapScene scene(images16, "", bpp);
for (unsigned int i = 0; i < scene.NumImages(); i++)
maps.emplace_back(scene.GetMap(i));
}

wxBitmap MagickToBitmap(Magick::Image image, int width, int height)
Expand Down Expand Up @@ -95,11 +108,109 @@ void TransferToWx(const Palette& palette, wxImage& wx)
for (unsigned int i = 0; i < palette.Size(); i++)
{
const Color16& c = palette.At(i);
InfoLog("%d %d %d\n", c.r, c.g, c.b);
wx.SetRGB(i % 16, i / 16, c.r << 3, c.g << 3, c.b << 3);
}
}

void TransferToWx(const PaletteBankManager& pbmanager, wxImage& wx)
{
wx.Create(16, 16);
for (unsigned int bank_id = 0; bank_id < pbmanager.Size(); bank_id++)
{
const PaletteBank& bank = pbmanager[bank_id];
int bx = (bank_id % 4) * 4;
int by = (bank_id / 4) * 4;
for (unsigned int i = 0; i < bank.Size(); i++)
{
const Color16& c = bank.At(i);
wx.SetRGB(i % 4 + bx, i / 4 + by, c.r << 3, c.g << 3, c.b << 3);
}
}
}

void TransferToWx(const Tileset& tileset, wxImage& wx)
{
// 16 x 64
const int tilesX = 32;
const int tilesY = 32;
wx.Create(tilesX * 8, tilesY * 8);
int bpp = tileset.bpp;
if (bpp == 4)
{
for (unsigned int i = 0; i < tileset.tilesExport.size(); i++)
{
const Tile& tile = tileset.tilesExport[i];
const PaletteBank& palette = tileset.paletteBanks[tile.palette_bank];
int tx = i % tilesX;
int ty = i / tilesX;
for (unsigned int j = 0; j < TILE_SIZE; j++)
{
unsigned char pix = tile.pixels[j];
const auto& c = palette.At(pix);
wx.SetRGB(tx * 8 + j % 8, ty * 8 + j / 8, c.r << 3, c.g << 3, c.b << 3);
}
}
}
else
{
const Palette& palette = *tileset.palette;
for (unsigned int i = 0; i < tileset.tilesExport.size(); i++)
{
const Tile& tile = tileset.tilesExport[i];
int tx = i % tilesX;
int ty = i / tilesX;
for (unsigned int j = 0; j < TILE_SIZE; j++)
{
unsigned char pix = tile.pixels[j];
const auto& c = palette.At(pix);
wx.SetRGB(tx * 8 + j % 8, ty * 8 + j / 8, c.r << 3, c.g << 3, c.b << 3);
}
}
}
}

void TransferToWx(const Map& map, wxImage& wx)
{
wx.Create(map.width * 8, map.height * 8);
if (map.tileset->bpp == 4)
{
for (unsigned int i = 0; i < map.data.size(); i++)
{
int x = i % map.width;
int y = i / map.width;
int tile_id = map.data[i] & 0x3FF;
int pal_id = (map.data[i] >> 12) & 0xF;
const Tile& tile = map.tileset->tilesExport[tile_id];
const PaletteBank& palette = map.tileset->paletteBanks[pal_id];
for (unsigned int j = 0; j < TILE_SIZE; j++)
{
unsigned char pix = tile.pixels[j];
if (!pix) continue;
const auto& c = palette.At(pix);
wx.SetRGB(x * 8 + j % 8, y * 8 + j / 8, c.r << 3, c.g << 3, c.b << 3);
}
}
}
else
{
for (unsigned int i = 0; i < map.data.size(); i++)
{
int x = i % map.width;
int y = i / map.width;
int tile_id = map.data[i] & 0x3FF;
const Tile& tile = map.tileset->tilesExport[tile_id];
const Palette& palette = *map.tileset->palette;
for (unsigned int j = 0; j < TILE_SIZE; j++)
{
unsigned char pix = tile.pixels[j];
if (!pix) continue;
const auto& c = palette.At(pix);
wx.SetRGB(x * 8 + j % 8, y * 8 + j / 8, c.r << 3, c.g << 3, c.b << 3);
}
}
}
}

void TransferToNin10Kit(const wxImage& wx, Image8Bpp& image)
{

Expand Down
4 changes: 4 additions & 0 deletions gui/imageutil.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,12 @@ wxBitmap MagickToBitmap(Magick::Image, int width, int height);

void ConvertToMode3(std::map<std::string, ImageInfo>& images, std::vector<Image16Bpp>& images16);
void ConvertToMode4(std::map<std::string, ImageInfo>& images, std::vector<Image8Bpp>& images8);
void ConvertToMode0(std::map<std::string, ImageInfo>& images, std::vector<Map>& maps, int bpp);
void TransferToWx(const Image16Bpp& image, wxImage& wx);
void TransferToWx(const Image8Bpp& image, wxImage& wx);
void TransferToWx(const Palette& palette, wxImage& wx);
void TransferToWx(const PaletteBankManager& pbmanager, wxImage& wx);
void TransferToWx(const Tileset& tileset, wxImage& wx);
void TransferToWx(const Map& map, wxImage& wx);

#endif
40 changes: 39 additions & 1 deletion gui/nin10kitviewer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@

Nin10KitViewerFrame::Nin10KitViewerFrame() : Nin10KitViewerGUI(NULL)
{
wxSize size = buttonSizer->GetSize();
size.SetWidth(256);
buttonSizer->SetMinSize(size);
}

Nin10KitViewerFrame::~Nin10KitViewerFrame()
Expand Down Expand Up @@ -73,13 +76,47 @@ void Nin10KitViewerFrame::UpdateMode4(std::map<std::string, ImageInfo>& images)
graphics.push_back(wxBitmap(wxImage));
}

graphicsBitmap->SetBitmap(graphics[selectedGraphic]);
wxBitmap& bitmap = graphics[selectedGraphic];
graphicsBitmap->SetBitmap(bitmap);
paletteBitmap->SetBitmap(wxBitmap(palette));
}

void Nin10KitViewerFrame::UpdateMode0(std::map<std::string, ImageInfo>& images, int bpp)
{
EventLog l(__func__);
sharedSizer->Show(paletteSizer, true, true);
sharedSizer->Show(tilesetSizer, true, true);
graphics.clear();
selectedGraphic = 0;

std::vector<Map> maps;
ConvertToMode0(images, maps, bpp);

Tileset& tileset = *maps[0].tileset;

wxImage wxtileset;
wxImage wxpalette;

if (bpp == 4)
TransferToWx(tileset.paletteBanks, wxpalette);
else
TransferToWx(*tileset.palette, wxpalette);
wxpalette.Rescale(256, 256, wxIMAGE_QUALITY_NORMAL);

TransferToWx(tileset, wxtileset);
wxtileset.Rescale(256, 256, wxIMAGE_QUALITY_NORMAL);

for (const auto& map : maps)
{
wxImage wxImage;
TransferToWx(map, wxImage);
graphics.push_back(wxBitmap(wxImage));
}

wxBitmap& bitmap = graphics[selectedGraphic];
graphicsBitmap->SetBitmap(bitmap);
paletteBitmap->SetBitmap(wxBitmap(wxpalette));
tilesetBitmap->SetBitmap(wxBitmap(wxtileset));
}

void Nin10KitViewerFrame::UpdateSprites(std::map<std::string, ImageInfo>& images, int bpp)
Expand All @@ -93,6 +130,7 @@ void Nin10KitViewerFrame::OnPrev(wxCommandEvent& event)
selectedGraphic = std::max(std::min(selectedGraphic - 1, (int)graphics.size() - 1), 0);
VerboseLog("%d is now selected", selectedGraphic);
graphicsBitmap->SetBitmap(graphics[selectedGraphic]);

}

void Nin10KitViewerFrame::OnNext(wxCommandEvent& event)
Expand Down
Loading

0 comments on commit b76400e

Please sign in to comment.