Rev 14 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#ifndef _XSPFILE_H__#define _XSPFILE_H__#include "BaseFile.h"#include "ShipData.h"#include "StringList.h"class CCatFile;#define SHIPYARD_NONE 0#define SHIPYARD_ARGON 1#define SHIPYARD_BORON 2#define SHIPYARD_PARANID 4#define SHIPYARD_SPLIT 8#define SHIPYARD_TELADI 16#define SHIPYARD_PIRATES 32#define SHIPYARD_FRIEND 64#define SHIPYARD_XENON 128#define SHIPYARD_TERRAN 256#define SHIPYARD_ATF 512#define SHIPYARD_YAKI 1024#define SHIPYARD_MAX SHIPYARD_TERRANenum {TAT_NONE, TAT_SINGLE, TAT_3};#define TSHIPPOS_CLASS 53enum {IMPORTSHIP_NONE, IMPORTSHIP_SCENE, IMPORTSHIP_EXTRACTSCENE, IMPORTSHIP_DUMMIES, IMPORTSHIP_COMPONANT, IMPORTSHIP_MODELS, IMPORTSHIP_TEXTURES, IMPORTSHIP_TEXTS, IMPORTSHIP_BODIES, IMPORTSHIP_COCKPITS, IMPORTSHIP_PACK, IMPORTSHIP_DONE};int SPKEXPORT GetMaxShipyards ();CyString SPKEXPORT GetShipyardName (int s);typedef struct SWeaponMask {int iMask;int iGame;} SWeaponMask;typedef struct SText{int iId;CyString sName;CyString sDesc;} SText;typedef struct SDummy{CyString sSection;CyString sData;} SDummy;typedef struct SComponent{CyString sSection;CyString sSection2;CyString sData;} SComponent;typedef struct SCockpit{CyString sCockpit;CLinkList<SWeaponMask> lWeaponMask;int iIndex;} SCockpit;class SPKEXPORT CXspFile : public CBaseFile{public:CXspFile ();~CXspFile () { this->Delete(); }static bool ReadAnimations(CyStringList *lIn, CyStringList *lOut, int startRecord);static int GetAnimationType(CyString type);virtual bool WriteHeader ( FILE *id, int, int );bool IsLanguageText () { return m_bLanguageText; }bool IsExistingShip () { return m_bExistingShip; }int GetOriginalDescription () { return m_iOrgDesc; }int GetShipyards () { return m_iShipyard; }const Utils::String &GetShipID () const { return m_sID; }const Utils::String &GetShipData () const { return m_sData; }CyString GetX3ShipData();CyString GetTCShipData();CyString GetShipFilename (){CyString s = m_sName + "-" + m_sAuthor;s = s.Remove ( ' ' );s = s.Remove ( '\\' );s = s.Remove ( '/' );return s;}SText *FindShipText(int lang);CyString GetTextName(int lang);CyString GetTextDescription(int lang);void SetLanguageText ( bool b ) { m_bLanguageText = b; m_bChanged = true; }void SetExistingShip ( bool b ) { m_bExistingShip = b; m_bChanged = true; }void SetOriginalDescription ( int i ) { m_iOrgDesc = i; m_bChanged = true; }void SetShipID (const Utils::String &sId ) { m_sID = sId; m_bChanged = true; }void SetShipData (const Utils::String &sData ) { m_sData = sData; m_bChanged = true; }void SetSceneFile ( C_File *f ) { m_pSceneFile = f; }void SetCockpitFile ( C_File *f ) { m_pCockpitFile = f; }void AddAnimation(CyStringList *list);void AddAnimation(CyString data) { m_lAnimations.PushBack(data, true); m_bChanged = true; }void AddBodies(CyString data);void AddBody(CyString section, CyString data);void AddCutData(CyString data) { m_lCutData.PushBack(data, true); m_bChanged = true; }void AddText ( int id, CyString name, CyString desc );void AddCockpit ( CyString cockpit, int game, int mask = -1, int index = -1 );void NewCockpit ( CyString id, CyString scene, int mask );void EditCockpit ( CyString id, CyString cockpit);void EditCockpit(CyString id, CyString scene, int mask);CyString GetCockpitData(CyString id);SCockpit *FindCockpit(CyString id);void AddDummy ( CyString section, CyString data );void AddComponent ( CyString section, CyString section2, CyString data );void AddWeaponMask ( int game, int mask );void AddMissileMask ( int game, int mask );void RemoveText(int id);void ClearText() { m_lText.MemoryClear(); m_bChanged = true; }void AddShipyard ( int s ) { m_iShipyard |= s; m_bChanged = true; }void RemoveShipyard ( int s ) { m_iShipyard &= ~(s); m_bChanged = true; }void SetShipyard(int s, bool b) { if ( b ) AddShipyard(s); else RemoveShipyard(s); }void ToggleShipyard(int s) { if ( this->IsShipyard(s) ) RemoveShipyard(s); else AddShipyard(s); }bool RemoveCutData(CyString cut);bool RemoveCockpit(CyString cockpitid);bool RemoveComponent(CyString section1, CyString section2, CyString data);bool RemoveDummy(CyString section, CyString data);bool RemoveBodies(CyString body);bool RemoveAnimation(CyString ani);bool IsSigned() { return false; }bool IsValid ();bool IsShipyard(int s) { return (m_iShipyard & s) ? true : false; }bool AnyShipyards() { return (m_iShipyard > 0) ? true : false; }void AdjustCockpits();virtual Utils::String CreateValuesLine () const;virtual bool ParseValueLine(const Utils::String &line);virtual int GetType () { return TYPE_XSP; }CyString GetShipName(int lang);bool ConvertOld(CyString file);CyStringList *GetAnimations() { return &m_lAnimations; }CyStringList *GetCutData() { return &m_lCutData; }CyStringList *GetBodies() { return &m_lBodies; }CLinkList<SWeaponMask> *GetLaserMasks() { return &m_lWeaponMasks; }CLinkList<SWeaponMask> *GetMissileMasks() { return &m_lMissileMasks; }CLinkList<SText> *GetTexts() { return &m_lText; }CLinkList<SDummy> *GetDummies() { return &m_lDummy; }CLinkList<SComponent> *GetComponents() { return &m_lComponent; }CLinkList<SCockpit> *GetCockpits() { return &m_lCockpit; }int GetLaserMask(int game, bool getOnly = false);int GetMissileMask(int game, bool getOnly = false);void SetLaserMask(int game, int mask);void SetMissileMask(int game, int mask);void SetCreatedShipData(CShipData *data) { m_sData = data->CreateData().ToString(); }bool AnyTexts() { return !m_lText.empty(); }bool AnyDummies() { return !m_lDummy.empty(); }bool AnyComponents() { return !m_lComponent.empty(); }bool AnyCockpits() { return !m_lCockpit.empty(); }bool AnyCutData() { return !m_lCutData.Empty(); }bool AnyBodies() { return !m_lBodies.Empty(); }bool AnyAnimations() { return !m_lAnimations.Empty(); }CyString GetShipClass();// ship extractionbool StartExtractShip(CyString catFile, CyString id, CProgressInfo *progress);bool StartExtractShip(CCatFile *catFile, CyString id, CProgressInfo *progress);bool ExtractShip(CCatFile *catFile, CyString id, CProgressInfo *progress);bool ExtractShip(CyString catFile, CyString id, CProgressInfo *progress);C_File *ExtractFileToPackage(CCatFile *catFile, CyString file, int type, CyString addAs = NullString);bool ExtractSceneFiles(CCatFile *catFile);bool ExtractSceneFiles(CyString catFile);bool ProcessSceneFileSection(int section, CCatFile *catFile, CyStringList *lModels, CProgressInfo *progress);bool ProcessSceneFiles(CCatFile *catFile, CProgressInfo *progress);bool ProcessSceneFiles(CyString catFile, CProgressInfo *progress);bool UpdateSigned(bool updateFiles) { m_bSigned = false; return false; }void PackAllFiles();CyStringList *ReadSceneModels();void ExtractComponants(CCatFile *catFile, CyStringList *sceneModels);void ExtractDummies(CCatFile *catFile, CyStringList *sceneModels, bool add);void ExtractTextures(CCatFile *catFile);bool GetTextureList(CyStringList *list, const unsigned char *olddata, size_t size);void ExtractTexts(CCatFile *catFile, int textId);bool AddTextFromFile(FILE *id, int textId = -1);bool AddTextFromFile(CyString file, int textId = -1);bool ExtractBodies(CCatFile *catFile, CyStringList *sceneModels);bool ImportBodies(CyStringList *sceneModels, CyString filename);bool ExtractCockpits(CCatFile *catFile);bool ImportCockpits(CyString filename);CyString FormatShipData(CyStringList *cockpits, int *text, int game);virtual bool LoadPackageData(const Utils::String &sFfirst, const Utils::String &sRest);virtual bool GeneratePackagerScript(bool wildcard, CyStringList *list, bool datafile = false);protected:virtual void Delete ();virtual void SetDefaults ();virtual bool CheckHeader(const Utils::String header) const;C_File *m_pSceneFile, *m_pCockpitFile;bool m_bLanguageText, m_bExistingShip;int m_iOrgDesc;Utils::String m_sID;Utils::String m_sData;CyStringList m_lCutData;CyStringList m_lBodies;CyStringList m_lAnimations;CLinkList<SCockpit> m_lCockpit;CLinkList<SText> m_lText;CLinkList<SComponent> m_lComponent;CLinkList<SDummy> m_lDummy;CLinkList<SWeaponMask> m_lWeaponMasks;CLinkList<SWeaponMask> m_lMissileMasks;int m_iShipyard;};#endif //_XSPFILE_H__