Exemplo n.º 1
0
int main()
{
  Flexlay flexlay;
  flexlay.init();

  Editor editor;

  GUIManager* gui = editor.get_gui_manager();

  new CL_Button(CL_Rect(CL_Point(50, 50), 
                        CL_Size(100, 25)),
                "Hello World", gui->get_component());

  EditorMap m;
  Tileset tileset(32);
  TilemapLayer tilemap(tileset, 20, 10);
  
  m.add_layer(tilemap.to_layer());

  TilemapLayer::set_current(tilemap);

  EditorMapComponent editor_map(CL_Rect(0, 0, 799, 599), gui->get_component());
  Workspace workspace(799, 599);
  editor_map.set_workspace(workspace);
  workspace.set_map(m);
 
  new CL_Button(CL_Rect(CL_Point(50, 150), 
                        CL_Size(100, 25)),
                "Quit", gui->get_component());

  gui->run();
 
  flexlay.deinit();
}
void
SectorBuilder::parse_object(const FileReader& reader)
{
  GameObjectHandle obj;

  if(reader.get_name() == "tilemap")
  {
    std::auto_ptr<TileMap> tilemap(new TileMap(reader));

    if (tilemap->get_name() == "interactive")
      m_sector.interactive_tilemap = tilemap.get();
    else if (tilemap->get_name() == "interactivebackground")
      m_sector.interactivebackground_tilemap = tilemap.get();

    obj.reset(tilemap.release());
  }
  else if (reader.get_name() == "navgraph-edge-ref")
  {
    // FIXME: Implement me
  }
  else if(reader.get_name() == "background")
  {
    // TODO
  }
  else if(reader.get_name() == "layer")
  {    
    parse_layer(reader);
  }
  else 
  {
    obj = ObjectFactory::create(reader);
    if (!obj)
    {
      std::cout << "Skipping unknown Object: " << reader.get_name() << "\n";
    }
  }

  if (obj)
  {
    std::string id_str;
    if (reader.read("id", id_str))
    {
      id_table[id_str] = obj;
    }

    std::string parent_str;
    if (reader.read("parent", parent_str))
    {
      if (!parent_str.empty())
        parent_table[obj] = parent_str;
    }

    m_sector.add(obj);
  }
}
Exemplo n.º 3
0
NetPanzerFileStruct::NetPanzerFileStruct(Tileset tileset, const std::string& filename)
  : impl(new NetPanzerFileStructImpl())
{
  impl->tileset = tileset;
  
  // FIXME: endian issues
  unsigned char   netp_id_header[64]; // Copyright PyroSoft Inc....
  unsigned short  id; // What is this?
  char            name[256];
  char            description[1024];
  unsigned short  x_size; // width
  unsigned short  y_size; // height
  char            tile_set[256]; // name of the tileset: "summer12mb.tls"
 
  unsigned short  thumbnail_x_pix;
  unsigned short  thumbnail_y_pix;

  std::ifstream file(filename.c_str());

  if (!file)
    {
      std::cout << "NetPanzerFileStructImpl: Error: " << filename << std::endl;
    }

  file.read(reinterpret_cast<char*>(&netp_id_header), sizeof(netp_id_header));
  file.read(reinterpret_cast<char*>(&id), sizeof(short));
  file.read(reinterpret_cast<char*>(&name), sizeof(name));
  file.read(reinterpret_cast<char*>(&description), sizeof(description));
  file.read(reinterpret_cast<char*>(&x_size), sizeof(short));
  file.read(reinterpret_cast<char*>(&y_size), sizeof(short));
  file.read(reinterpret_cast<char*>(&tile_set), sizeof(tile_set));
  file.read(reinterpret_cast<char*>(&thumbnail_x_pix), sizeof(short));
  file.read(reinterpret_cast<char*>(&thumbnail_y_pix), sizeof(short));

  TilemapLayer tilemap(tileset, x_size, y_size);
  Field<int>* field      = tilemap.get_field();

  std::vector<unsigned short> vec;
  vec.resize(x_size * y_size);
  file.read(reinterpret_cast<char*>(&(*vec.begin())), sizeof(unsigned short)*vec.size());

  for(int i = 0; i < x_size*y_size; ++i)
    (*field)[i] = vec[i];

  std::cout << "Thumbnail: " << thumbnail_x_pix << " " << thumbnail_y_pix << std::endl;

  impl->tilemap     = tilemap;
  impl->id_header   = reinterpret_cast<char*>(netp_id_header);
  impl->name        = name;
  impl->description = description;
}
Exemplo n.º 4
0
Map::Map(int maxH, int maxL)
{

    this->x = 0;
    this->y = 0;

    if(maxL && maxH)
    {
        for(int x = 0; x < maxH; x++)
        {
            vector<Title*> row;
            for(int y = 0; y < maxL; y++)
            {
                row.push_back(new Title);
                row[y]->ID = tilemap(y,x);
                row[y]->pos = sf::Vector2i(x, y);
                row[y]->visible = 0;
                row[y]->discoverd = 0;

                if(row[y]->ID == 1)
                {
                    row[y]->cantWalk = 1;
                    row[y]->opaque = 1;
                    row[y]->spriteName = "stone";
                }
                else
                {
                    row[y]->cantWalk = 0;
                    row[y]->opaque = 0;
                    row[y]->spriteName = "grass";
                }
            }
            map.push_back(row);
        }

        for(int x = 1; x < maxH-1; x++)
        {
            for(int y = 1; y < maxL-1; y++)
            {
                map[x][y]->voisin.top = map[x][y-1];
                map[x][y]->voisin.bottom = map[x][y+1];
                map[x][y]->voisin.left = map[x-1][y];
                map[x][y]->voisin.right = map[x+1][y];
            }
        }
    }

}
Exemplo n.º 5
0
bool LevelTilemap::Load(CartFile& cart, const LevelProperties& prop,
    const LevelStyle& style)
{
  CartFile::Scope scope(cart);

  DWORD map_id = style.map_id_;
  DWORD map_index = prop.map_index_;

  if (!cart.Read(0x35BC54, &tilemap_type_, map_id * 2)) {
    return false;
  }

  /* Load tile graphics */
  if (!cart.FollowPtr3(0x35BB2E, map_id * 3)) {
    return false;
  }
  Buffer tiledata(false);
  int tiledata_size;
  if (!tiledata.Alloc(32768)) {
    return false;
  }
  tiledata_size = RareDecompress(tiledata, cart);
  if (tiledata_size <= 0 || (tiledata_size % 32)) {
    return false;
  }
  tiledata.WriteDebug("gfx3");

  {
    /* Graphics header */

    if (!cart.FollowPtr2(0x3D819A, style.graphics_ * 2)) {
      return false;
    }

    Buffer gfx_data(true);
    BYTE bank;
    WORD addr, op, size, size1, size2;
    UINT offset;
    DWORD addr1 = 0, addr2 = 0;
    bool compressed = false;

    while (1) {
      if (!cart.Readf("BHHH",
        &bank, &addr, &op, &size))
      {
        return false;
      }
      if (bank == 0) {
        break ;
      }
      offset = (bank << 16) | addr;
      if (offset <= 0xC00000) {
        return false;
      }
      offset -= 0xC00000;
      switch (op) {
      case 0xA000:
        addr1 = offset;
        compressed = true;
        break ;
      case 0x2000:
        addr1 = offset;
        compressed = false;
        size1 = size;
        break ;
      case 0x4420:
        addr2 = offset;
        compressed = false;
        size2 = size;
        break ;
      }
    }
    if (addr1 == 0) {
      return false;
    }
    cart.Seek(addr1);
    if (!gfx_data.Alloc(1024)) {
      return false;
    }

    UINT tile_count;
    int gfx_size;

    if (compressed) {
      gfx_size = RareDecompress(gfx_data, cart);
      if (gfx_size <= 0) {
        return false;
      }
    }
    else {
      if (size1 >= 0x4840) {
        return false;
      }
      gfx_size = 0x4840 + size2;
      gfx_data.Write(0, cart, size1);
      gfx_data.MemSet(0, size1 - 0x4840);
      cart.Seek(addr1 + 0x4840);
      if (addr2 != 0) {
        gfx_data.Write(0x4840, cart, size2);
      }
    }
    if (gfx_size % 32 != 0) {
      return false;
    }
    tile_count = gfx_size / 32;

    TilePalette palette;
    DWORD def_palette;
    def_palette = style.palette_;
    if (!def_palette) {
      if (!cart.Read(0x35BC2A + map_id * 2, &def_palette, 2)) {
        return false;
      }
    }
    def_palette |= 0x3D0000;
    palette.LoadPalette(cart, def_palette);
    switch (style.routine1_) {
    case 0x00:
      palette.LoadSubPalette(cart, 0x3D1710, 0, 128);
      break ;
    case 0x01:
      palette.LoadSubPalette(cart, 0x3D268E, 16, 16);
      break ;
    case 0x02:
      palette.LoadPalette(cart, 0x3D2AEE);
      break ;
    case 0x03:
      palette.LoadPalette(cart, 0x3D29EE);
      break ;
    case 0x04:
      palette.LoadSubPalette(cart, 0x3D324E, 0, 128);
      break ;
    case 0x05:
      palette.LoadSubPalette(cart, 0x3D304E, 0, 128);
      break ;
    case 0x06:
      palette.LoadSubPalette(cart, 0x3D2EEE, 0, 128);
      break ;
    case 0x07:
      palette.LoadSubPalette(cart, 0x3D15F0, 12, 16);
      break ;
    case 0x08:
      palette.LoadSubPalette(cart, 0x3D0DD0, 0, 16);
      break ;
    case 0x0A:
      palette.LoadSubPalette(cart, 0x3D326E, 16, 16);
      break ;
    case 0x0C:
      palette.LoadSubPalette(cart, 0x3D2BEE, 0, 128);
      break ;
    case 0x0D:
      palette.LoadSubPalette(cart, 0x3D07F0, 0, 128);
      break ;
    case 0x0E:
      palette.LoadSubPalette(cart, 0x3D268E, 112, 16);
      break ;
    case 0x10:
      palette.LoadSubPalette(cart, 0x3D3A4E, 0, 128);
      break ;
    case 0x12:
      palette.LoadSubPalette(cart, 0x3D2DCE, 0, 16);
      break ;
    case 0x14:
      palette.LoadPalette(cart, 0x3D1610);
      break ;
    }

  }
  if (!cart.FollowPtr2(0x35BC7E, map_id * 2, 0x35)) {
    return false;
  }
  if (!cart.ReadAddr(tilemap_addr_, 0x35BAEF + map_id * 3)) {
    return false;
  }
  if (!cart.Readf("HH", &map_x_, &map_y_)) {
    return false;
  }
  cart.Skip(map_index * 10);
  if (!cart.Readf("HHHHH",
    &map_left_, &map_right_,
    &map_top_, &map_bottom_,
    &map_code_))
  {
    return false;
  }
  WORD cx, cy;
  map_left_ /= 32, map_right_ /= 32,
  map_top_ /= 32, map_bottom_ /= 32;
  cx = map_right_ - map_left_,
  cy = map_bottom_ - map_top_;

  cart.Seek(tilemap_addr_);
  Buffer tilemap(true);
  int tilemap_size;

  if (tilemap_type_ & 0x0400) {
    tilemap.Alloc(1024);
    tilemap_size = RareDecompress(tilemap, cart);
    if (tilemap_size <= 0) {
      return false;
    }
  }
  else {
    tilemap_size = 256;
    tilemap.Write(0, cart, tilemap_size);
  }
  bool vert = (map_code_ & 0x40) ? true : false;

  for (int x = 0, ix = map_left_; ix < map_right_; x++, ix++)
  {
    for (int y = 0, iy = map_top_; iy < map_bottom_; y++, iy++)
    {

    }
  }
  return true;
}