diff --git a/src/app/gfx/bitmap.cc b/src/app/gfx/bitmap.cc index 1c20c956..c8e6a21d 100644 --- a/src/app/gfx/bitmap.cc +++ b/src/app/gfx/bitmap.cc @@ -106,9 +106,14 @@ void Bitmap::CreateTexture(std::shared_ptr renderer) { void Bitmap::ApplyPalette(const SNESPalette &palette) { palette_ = palette; for (int i = 0; i < palette.size_; ++i) { - surface_->format->palette->colors[i].r = palette.GetColor(i).rgb.x; - surface_->format->palette->colors[i].g = palette.GetColor(i).rgb.y; - surface_->format->palette->colors[i].b = palette.GetColor(i).rgb.z; + if (palette.GetColor(i).transparent) { + surface_->format->palette->colors[i].a = 0; + } else { + surface_->format->palette->colors[i].r = palette.GetColor(i).rgb.x; + surface_->format->palette->colors[i].g = palette.GetColor(i).rgb.y; + surface_->format->palette->colors[i].b = palette.GetColor(i).rgb.z; + surface_->format->palette->colors[i].a = 255; + } } } diff --git a/src/app/gfx/snes_palette.h b/src/app/gfx/snes_palette.h index bee951a9..f0481184 100644 --- a/src/app/gfx/snes_palette.h +++ b/src/app/gfx/snes_palette.h @@ -45,7 +45,9 @@ struct SNESColor { void setRgb(ImVec4); void setSNES(snes_color); void setSNES(uint16_t); + void setTransparent(bool t) { transparent = t; } + bool transparent = false; uint16_t snes = 0; ImVec4 rgb; }; diff --git a/src/app/zelda3/overworld_map.cc b/src/app/zelda3/overworld_map.cc index 0c6388b5..d54ec9c3 100644 --- a/src/app/zelda3/overworld_map.cc +++ b/src/app/zelda3/overworld_map.cc @@ -134,10 +134,9 @@ void SetColorsPalette(ROM& rom, int index, gfx::SNESPalette& current, current.Create(new_palette); // ColorPalette pal = GFX.editort16Bitmap.Palette; - // for (int i = 0; i < 256; i++) { - // pal.Entries[i] = new_palette[i]; - // pal.Entries[(i / 16) * 16] = Color.Transparent; - // } + for (int i = 0; i < 256; i++) { + current[(i / 16) * 16].setTransparent(true); + } // GFX.mapgfx16Bitmap.Palette = pal; // GFX.mapblockset16Bitmap.Palette = pal; @@ -334,8 +333,7 @@ void OverworldMap::LoadPalette() { uchar pal0 = 0; - uchar pal1 = - rom_[core::overworldMapPaletteGroup + (area_palette_ * 4)]; // aux1 + uchar pal1 = rom_[core::overworldMapPaletteGroup + (area_palette_ * 4)]; uchar pal2 = rom_[core::overworldMapPaletteGroup + (area_palette_ * 4) + 1]; // aux2 uchar pal3 = rom_[core::overworldMapPaletteGroup + (area_palette_ * 4) +