diff options
Diffstat (limited to 'src/game/editor/ed_io.cpp')
| -rw-r--r-- | src/game/editor/ed_io.cpp | 130 |
1 files changed, 65 insertions, 65 deletions
diff --git a/src/game/editor/ed_io.cpp b/src/game/editor/ed_io.cpp index 4dd71245..a5ead97a 100644 --- a/src/game/editor/ed_io.cpp +++ b/src/game/editor/ed_io.cpp @@ -67,7 +67,7 @@ void editor_load_old(DATAFILE *df, MAP *map) MAPRES_FLAGSTAND_RED=5, MAPRES_FLAGSTAND_BLUE=6, MAPRES_ENTS_END, - + ITEM_NULL=0, ITEM_WEAPON_GUN=0x00010001, ITEM_WEAPON_SHOTGUN=0x00010002, @@ -78,7 +78,7 @@ void editor_load_old(DATAFILE *df, MAP *map) ITEM_ARMOR=0x00030001, ITEM_NINJA=0x00040001, }; - + enum { MAPRES_REGISTERED=0x8000, @@ -97,9 +97,9 @@ void editor_load_old(DATAFILE *df, MAP *map) for(int t = 0; t < num; t++) { mapres_tilemap *tmap = (mapres_tilemap *)datafile_get_item(df, start+t,0,0); - + CLayerTiles *l = new CLayerTiles(tmap->width, tmap->height); - + if(tmap->main) { // move game layer to correct position @@ -108,7 +108,7 @@ void editor_load_old(DATAFILE *df, MAP *map) if(map->groups[0]->layers[i] == pEditor->map.game_layer) map->groups[0]->swap_layers(i, i+1); } - + game_width = tmap->width; game_height = tmap->height; } @@ -119,18 +119,18 @@ void editor_load_old(DATAFILE *df, MAP *map) // process the data unsigned char *src_data = (unsigned char *)datafile_get_data(df, tmap->data); CTile *dst_data = l->tiles; - + for(int y = 0; y < tmap->height; y++) for(int x = 0; x < tmap->width; x++, dst_data++, src_data+=2) { dst_data->index = src_data[0]; dst_data->flags = src_data[1]; } - + l->image = tmap->image; } } - + // load images { int start, count; @@ -144,18 +144,18 @@ void editor_load_old(DATAFILE *df, MAP *map) img->width = imgres->width; img->height = imgres->height; img->format = CImageInfo::FORMAT_RGBA; - + // copy image data img->data = mem_alloc(img->width*img->height*4, 1); mem_copy(img->data, data, img->width*img->height*4); img->tex_id = Graphics()->LoadTextureRaw(img->width, img->height, img->format, img->data, CImageInfo::FORMAT_AUTO, 0); map->images.add(img); - + // unload image datafile_unload_data(df, imgres->image_data); } } - + // load entities { CLayerGame *g = map->game_layer; @@ -173,7 +173,7 @@ void editor_load_old(DATAFILE *df, MAP *map) int x = e->x/32; int y = e->y/32; int id = -1; - + if(t == MAPRES_SPAWNPOINT) id = ENTITY_SPAWN; else if(t == MAPRES_SPAWNPOINT_RED) id = ENTITY_SPAWN_RED; else if(t == MAPRES_SPAWNPOINT_BLUE) id = ENTITY_SPAWN_BLUE; @@ -187,7 +187,7 @@ void editor_load_old(DATAFILE *df, MAP *map) else if(e->data[0] == ITEM_ARMOR) id = ENTITY_ARMOR_1; else if(e->data[0] == ITEM_HEALTH) id = ENTITY_HEALTH_1; } - + if(id > 0 && x >= 0 && x < g->width && y >= 0 && y < g->height) g->tiles[y*g->width+x].index = id+ENTITY_OFFSET; } @@ -212,7 +212,7 @@ int CEditorMap::Save(class IStorage *pStorage, const char *pFileName) m_pEditor->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "editor", aBuf); return 0; } - + // save version { CMapItemVersion Item; @@ -224,14 +224,14 @@ int CEditorMap::Save(class IStorage *pStorage, const char *pFileName) for(int i = 0; i < m_lImages.size(); i++) { CEditorImage *pImg = m_lImages[i]; - + // analyse the image for when saving (should be done when we load the image) // TODO! pImg->AnalyseTileFlags(); - + CMapItemImage Item; Item.m_Version = 1; - + Item.m_Width = pImg->m_Width; Item.m_Height = pImg->m_Height; Item.m_External = pImg->m_External; @@ -242,7 +242,7 @@ int CEditorMap::Save(class IStorage *pStorage, const char *pFileName) Item.m_ImageData = df.AddData(Item.m_Width*Item.m_Height*4, pImg->m_pData); df.AddItem(MAPITEMTYPE_IMAGE, i, sizeof(Item), &Item); } - + // save layers int LayerCount = 0, GroupCount = 0; for(int g = 0; g < m_lGroups.size(); g++) @@ -253,7 +253,7 @@ int CEditorMap::Save(class IStorage *pStorage, const char *pFileName) CMapItemGroup GItem; GItem.m_Version = CMapItemGroup::CURRENT_VERSION; - + GItem.m_ParallaxX = pGroup->m_ParallaxX; GItem.m_ParallaxY = pGroup->m_ParallaxY; GItem.m_OffsetX = pGroup->m_OffsetX; @@ -265,7 +265,7 @@ int CEditorMap::Save(class IStorage *pStorage, const char *pFileName) GItem.m_ClipH = pGroup->m_ClipH; GItem.m_StartLayer = LayerCount; GItem.m_NumLayers = 0; - + for(int l = 0; l < pGroup->m_lLayers.size(); l++) { if(!pGroup->m_lLayers[l]->m_SaveToMap) @@ -276,27 +276,27 @@ int CEditorMap::Save(class IStorage *pStorage, const char *pFileName) m_pEditor->Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "editor", "saving tiles layer"); CLayerTiles *pLayer = (CLayerTiles *)pGroup->m_lLayers[l]; pLayer->PrepareForSave(); - + CMapItemLayerTilemap Item; Item.m_Version = 2; - + Item.m_Layer.m_Flags = pLayer->m_Flags; Item.m_Layer.m_Type = pLayer->m_Type; - + Item.m_Color.r = pLayer->m_Color.r; Item.m_Color.g = pLayer->m_Color.g; Item.m_Color.b = pLayer->m_Color.b; Item.m_Color.a = pLayer->m_Color.a; Item.m_ColorEnv = -1; // not in use right now Item.m_ColorEnvOffset = 0; - + Item.m_Width = pLayer->m_Width; Item.m_Height = pLayer->m_Height; Item.m_Flags = pLayer->m_Game; Item.m_Image = pLayer->m_Image; Item.m_Data = df.AddData(pLayer->m_Width*pLayer->m_Height*sizeof(CTile), pLayer->m_pTiles); df.AddItem(MAPITEMTYPE_LAYER, LayerCount, sizeof(Item), &Item); - + GItem.m_NumLayers++; LayerCount++; } @@ -308,15 +308,15 @@ int CEditorMap::Save(class IStorage *pStorage, const char *pFileName) { CMapItemLayerQuads Item; Item.m_Version = 1; - Item.m_Layer.m_Flags = pLayer->m_Flags; + Item.m_Layer.m_Flags = pLayer->m_Flags; Item.m_Layer.m_Type = pLayer->m_Type; Item.m_Image = pLayer->m_Image; - + // add the data Item.m_NumQuads = pLayer->m_lQuads.size(); Item.m_Data = df.AddDataSwapped(pLayer->m_lQuads.size()*sizeof(CQuad), pLayer->m_lQuads.base_ptr()); df.AddItem(MAPITEMTYPE_LAYER, LayerCount, sizeof(Item), &Item); - + // clean up //mem_free(quads); @@ -325,10 +325,10 @@ int CEditorMap::Save(class IStorage *pStorage, const char *pFileName) } } } - + df.AddItem(MAPITEMTYPE_GROUP, GroupCount++, sizeof(GItem), &GItem); } - + // save envelopes int PointCount = 0; for(int e = 0; e < m_lEnvelopes.size(); e++) @@ -339,16 +339,16 @@ int CEditorMap::Save(class IStorage *pStorage, const char *pFileName) Item.m_StartPoint = PointCount; Item.m_NumPoints = m_lEnvelopes[e]->m_lPoints.size(); StrToInts(Item.m_aName, sizeof(Item.m_aName)/sizeof(int), m_lEnvelopes[e]->m_aName); - + df.AddItem(MAPITEMTYPE_ENVELOPE, e, sizeof(Item), &Item); PointCount += Item.m_NumPoints; } - + // save points int TotalSize = sizeof(CEnvPoint) * PointCount; CEnvPoint *pPoints = (CEnvPoint *)mem_alloc(TotalSize, 1); PointCount = 0; - + for(int e = 0; e < m_lEnvelopes.size(); e++) { int Count = m_lEnvelopes[e]->m_lPoints.size(); @@ -357,11 +357,11 @@ int CEditorMap::Save(class IStorage *pStorage, const char *pFileName) } df.AddItem(MAPITEMTYPE_ENVPOINTS, 0, TotalSize, pPoints); - + // finish the data file df.Finish(); m_pEditor->Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "editor", "saving done"); - + // send rcon.. if we can if(m_pEditor->Client()->RconAuthed()) { @@ -372,7 +372,7 @@ int CEditorMap::Save(class IStorage *pStorage, const char *pFileName) if(!str_comp(aMapName, CurrentServerInfo.m_aMap)) m_pEditor->Client()->Rcon("reload"); } - + return 1; } @@ -388,7 +388,7 @@ int CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Storag //DATAFILE *df = datafile_load(filename); if(!DataFile.Open(pStorage, pFileName, StorageType)) return 0; - + Clean(); // check version @@ -404,7 +404,7 @@ int CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Storag else if(pItem->m_Version == 1) { //editor.reset(false); - + // load images { int Start, Num; @@ -414,7 +414,7 @@ int CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Storag CMapItemImage *pItem = (CMapItemImage *)DataFile.GetItem(Start+i, 0, 0); char *pName = (char *)DataFile.GetData(pItem->m_ImageName); - // copy base info + // copy base info CEditorImage *pImg = new CEditorImage(m_pEditor); pImg->m_External = pItem->m_External; @@ -422,7 +422,7 @@ int CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Storag { char aBuf[256]; str_format(aBuf, sizeof(aBuf),"mapres/%s.png", pName); - + // load external CEditorImage ImgInfo(m_pEditor); if(m_pEditor->Graphics()->LoadPNG(&ImgInfo, aBuf, IStorage::TYPE_ALL)) @@ -437,7 +437,7 @@ int CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Storag pImg->m_Width = pItem->m_Width; pImg->m_Height = pItem->m_Height; pImg->m_Format = CImageInfo::FORMAT_RGBA; - + // copy image data void *pData = DataFile.GetData(pItem->m_ImageData); pImg->m_pData = mem_alloc(pImg->m_Width*pImg->m_Height*4, 1); @@ -450,33 +450,33 @@ int CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Storag str_copy(pImg->m_aName, pName, 128); m_lImages.add(pImg); - + // unload image DataFile.UnloadData(pItem->m_ImageData); DataFile.UnloadData(pItem->m_ImageName); } } - + // load groups { int LayersStart, LayersNum; DataFile.GetType(MAPITEMTYPE_LAYER, &LayersStart, &LayersNum); - + int Start, Num; DataFile.GetType(MAPITEMTYPE_GROUP, &Start, &Num); for(int g = 0; g < Num; g++) { CMapItemGroup *pGItem = (CMapItemGroup *)DataFile.GetItem(Start+g, 0, 0); - + if(pGItem->m_Version < 1 || pGItem->m_Version > CMapItemGroup::CURRENT_VERSION) continue; - + CLayerGroup *pGroup = NewGroup(); pGroup->m_ParallaxX = pGItem->m_ParallaxX; pGroup->m_ParallaxY = pGItem->m_ParallaxY; pGroup->m_OffsetX = pGItem->m_OffsetX; pGroup->m_OffsetY = pGItem->m_OffsetY; - + if(pGItem->m_Version >= 2) { pGroup->m_UseClipping = pGItem->m_UseClipping; @@ -485,19 +485,19 @@ int CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Storag pGroup->m_ClipW = pGItem->m_ClipW; pGroup->m_ClipH = pGItem->m_ClipH; } - + for(int l = 0; l < pGItem->m_NumLayers; l++) { CLayer *pLayer = 0; CMapItemLayer *pLayerItem = (CMapItemLayer *)DataFile.GetItem(LayersStart+pGItem->m_StartLayer+l, 0, 0); if(!pLayerItem) continue; - + if(pLayerItem->m_Type == LAYERTYPE_TILES) { CMapItemLayerTilemap *pTilemapItem = (CMapItemLayerTilemap *)pLayerItem; CLayerTiles *pTiles = 0; - + if(pTilemapItem->m_Flags&1) { pTiles = new CLayerGame(pTilemapItem->m_Width, pTilemapItem->m_Height); @@ -515,14 +515,14 @@ int CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Storag } pLayer = pTiles; - + pGroup->AddLayer(pTiles); void *pData = DataFile.GetData(pTilemapItem->m_Data); pTiles->m_Image = pTilemapItem->m_Image; pTiles->m_Game = pTilemapItem->m_Flags&1; - + mem_copy(pTiles->m_pTiles, pData, pTiles->m_Width*pTiles->m_Height*sizeof(CTile)); - + if(pTiles->m_Game && pTilemapItem->m_Version == MakeVersion(1, *pTilemapItem)) { for(int i = 0; i < pTiles->m_Width*pTiles->m_Height; i++) @@ -531,7 +531,7 @@ int CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Storag pTiles->m_pTiles[i].m_Index += ENTITY_OFFSET; } } - + DataFile.UnloadData(pTilemapItem->m_Data); } else if(pLayerItem->m_Type == LAYERTYPE_QUADS) @@ -549,24 +549,24 @@ int CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Storag mem_copy(pQuads->m_lQuads.base_ptr(), pData, sizeof(CQuad)*pQuadsItem->m_NumQuads); DataFile.UnloadData(pQuadsItem->m_Data); } - + if(pLayer) pLayer->m_Flags = pLayerItem->m_Flags; } } } - + // load envelopes { CEnvPoint *pPoints = 0; - + { int Start, Num; DataFile.GetType(MAPITEMTYPE_ENVPOINTS, &Start, &Num); if(Num) pPoints = (CEnvPoint *)DataFile.GetItem(Start, 0, 0); } - + int Start, Num; DataFile.GetType(MAPITEMTYPE_ENVELOPE, &Start, &Num); for(int e = 0; e < Num; e++) @@ -581,7 +581,7 @@ int CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Storag } } } - + return 1; } @@ -602,25 +602,25 @@ int CEditor::Append(const char *pFileName, int StorageType) if(!Err) return Err; - // modify indecies + // modify indecies gs_ModifyAddAmount = m_Map.m_lImages.size(); NewMap.ModifyImageIndex(ModifyAdd); - + gs_ModifyAddAmount = m_Map.m_lEnvelopes.size(); NewMap.ModifyEnvelopeIndex(ModifyAdd); - + // transfer images for(int i = 0; i < NewMap.m_lImages.size(); i++) m_Map.m_lImages.add(NewMap.m_lImages[i]); NewMap.m_lImages.clear(); - + // transfer envelopes for(int i = 0; i < NewMap.m_lEnvelopes.size(); i++) m_Map.m_lEnvelopes.add(NewMap.m_lEnvelopes[i]); NewMap.m_lEnvelopes.clear(); // transfer groups - + for(int i = 0; i < NewMap.m_lGroups.size(); i++) { if(NewMap.m_lGroups[i] == NewMap.m_pGameGroup) @@ -632,7 +632,7 @@ int CEditor::Append(const char *pFileName, int StorageType) } } NewMap.m_lGroups.clear(); - + // all done \o/ return 0; } |