| Line 688... | Line 688... | 
          
            | 688 | bool CXspFile::writeHeader(CFileIO &file, int valueheader, int valueComprLen) const
 | 688 | bool CXspFile::writeHeader(CFileIO &file, int valueheader, int valueComprLen) const
 | 
          
            | 689 | {
 | 689 | {
 | 
          
            | 690 | 	return file.write("XSPCycrow;%.2f;%d;%d\n", FILEVERSION, valueheader, valueComprLen);
 | 690 | 	return file.write("XSPCycrow;%.2f;%d;%d\n", FILEVERSION, valueheader, valueComprLen);
 | 
          
            | 691 | }
 | 691 | }
 | 
          
            | 692 |  
 | 692 |  
 | 
          
            | 693 | bool CXspFile::_checkHeader(const Utils::Stringheader) const
 | 693 | bool CXspFile::_checkHeader(const Utils::WString &header) const
 | 
          
            | 694 | {
 | 694 | {
 | 
          
            | 695 | 	if ( header.Compare("XSPCycrow") )
 | 695 | 	if ( header.Compare(L"XSPCycrow") )
 | 
          
            | 696 | 		return true;
 | 696 | 		return true;
 | 
          
            | 697 | 	return false;
 | 697 | 	return false;
 | 
          
            | 698 | }
 | 698 | }
 | 
          
            | 699 |  
 | 699 |  
 | 
          
            | 700 | void CXspFile::SetLaserMask(int game, int mask)
 | 700 | void CXspFile::SetLaserMask(int game, int mask)
 | 
          
            | Line 778... | Line 778... | 
          
            | 778 | 	if ( !m_sData.empty() )
 | 778 | 	if ( !m_sData.empty() )
 | 
          
            | 779 | 		return m_sData.token(";", TSHIPPOS_CLASS);
 | 779 | 		return m_sData.token(";", TSHIPPOS_CLASS);
 | 
          
            | 780 | 	return "OBJ_SHIP_M5";
 | 780 | 	return "OBJ_SHIP_M5";
 | 
          
            | 781 | }
 | 781 | }
 | 
          
            | 782 |  
 | 782 |  
 | 
          
            | 783 | bool CXspFile::GeneratePackagerScript(bool wildcard, Utils::CStringList*list, int game, const Utils::CStringList&gameAddons, bool datafile)
 | 783 | bool CXspFile::GeneratePackagerScript(bool wildcard, Utils::WStringList *list, int game, const Utils::WStringList &gameAddons, bool datafile)
 | 
          
            | 784 | {
 | 784 | {
 | 
          
            | 785 | 	if ( !CBaseFile::GeneratePackagerScript(wildcard, list, game, gameAddons, datafile) )
 | 785 | 	if ( !CBaseFile::GeneratePackagerScript(wildcard, list, game, gameAddons, datafile) )
 | 
          
            | 786 | 		return false;
 | 786 | 		return false;
 | 
          
            | 787 |  
 | 787 |  
 | 
          
            | 788 | 	list->pushBack("# File Type, Script or Ship");
 | 788 | 	list->pushBack(L"# File Type, Script or Ship");
 | 
          
            | 789 | 	list->pushBack("FileType: Ship");
 | 789 | 	list->pushBack(L"FileType: Ship");
 | 
          
            | 790 | 	list->pushBack("");
 | 790 | 	list->pushBack(L"");
 | 
          
            | 791 |  
 | 791 |  
 | 
          
            | 792 | 	if ( m_iShipyard )
 | 792 | 	if ( m_iShipyard )
 | 
          
            | 793 | 	{
 | 793 | 	{
 | 
          
            | 794 | 		list->pushBack("# Shipyards, Set which shipyards to add ships for sale to");
 | 794 | 		list->pushBack(L"# Shipyards, Set which shipyards to add ships for sale to");
 | 
          
            | 795 | 		for ( int i = SHIPYARD_ARGON; i <= SHIPYARD_MAX; i *= 2 )
 | 795 | 		for ( int i = SHIPYARD_ARGON; i <= SHIPYARD_MAX; i *= 2 )
 | 
          
            | 796 | 		{
 | 796 | 		{
 | 
          
            | 797 | 			if ( this->IsShipyard(i) )
 | 797 | 			if ( this->IsShipyard(i) )
 | 
          
            | 798 | 				list->pushBack("Shipyard: " + GetShipyardName(i));
 | 798 | 				list->pushBack(L"Shipyard: " + GetShipyardName(i).toWString());
 | 
          
            | 799 | 		}
 | 799 | 		}
 | 
          
            | 800 | 		list->pushBack("");
 | 800 | 		list->pushBack(L"");
 | 
          
            | 801 | 	}
 | 801 | 	}
 | 
          
            | 802 |  
 | 802 |  
 | 
          
            | 803 | 	if ( m_iOrgDesc > 0 )
 | 803 | 	if ( m_iOrgDesc > 0 )
 | 
          
            | 804 | 	{
 | 804 | 	{
 | 
          
            | 805 | 		list->pushBack("# Use Original Description, overrides text entrys to use one of the built in text");
 | 805 | 		list->pushBack(L"# Use Original Description, overrides text entrys to use one of the built in text");
 | 
          
            | 806 | 		list->pushBack(Utils::String("OriginalDescription: ") + (long)m_iOrgDesc);
 | 806 | 		list->pushBack(Utils::WString(L"OriginalDescription: ") + (long)m_iOrgDesc);
 | 
          
            | 807 | 		list->pushBack("");
 | 807 | 		list->pushBack(L"");
 | 
          
            | 808 | 	}
 | 808 | 	}
 | 
          
            | 809 |  
 | 809 |  
 | 
          
            | 810 | 	if ( !m_sID.empty() )
 | 810 | 	if ( !m_sID.empty() )
 | 
          
            | 811 | 	{
 | 811 | 	{
 | 
          
            | 812 | 		list->pushBack("# Ship ID, the ship id to identify the ship as");
 | 812 | 		list->pushBack(L"# Ship ID, the ship id to identify the ship as");
 | 
          
            | 813 | 		list->pushBack("ShipID: " + m_sID);
 | 813 | 		list->pushBack(L"ShipID: " + m_sID.toWString());
 | 
          
            | 814 | 	}
 | 814 | 	}
 | 
          
            | 815 |  
 | 815 |  
 | 
          
            | 816 | 	if ( m_bExistingShip )
 | 816 | 	if ( m_bExistingShip )
 | 
          
            | 817 | 	{
 | 817 | 	{
 | 
          
            | 818 | 		list->pushBack("# Existing Ship, replaces an existing ship in the game with ship package instead of creating a new entry");
 | 818 | 		list->pushBack(L"# Existing Ship, replaces an existing ship in the game with ship package instead of creating a new entry");
 | 
          
            | 819 | 		list->pushBack("ExistingShip");
 | 819 | 		list->pushBack(L"ExistingShip");
 | 
          
            | 820 | 		list->pushBack("");
 | 820 | 		list->pushBack(L"");
 | 
          
            | 821 | 	}
 | 821 | 	}
 | 
          
            | 822 |  
 | 822 |  
 | 
          
            | 823 | 	if ( !m_sData.empty() )
 | 823 | 	if ( !m_sData.empty() )
 | 
          
            | 824 | 	{
 | 824 | 	{
 | 
          
            | 825 | 		list->pushBack("# Ship Data, the TShip data entry to add to the game (parts of this are adjusted and auto generated by the installer)");
 | 825 | 		list->pushBack(L"# Ship Data, the TShip data entry to add to the game (parts of this are adjusted and auto generated by the installer)");
 | 
          
            | 826 | 		list->pushBack("ShipData: " + m_sData);
 | 826 | 		list->pushBack(L"ShipData: " + m_sData.toWString());
 | 
          
            | 827 | 		list->pushBack("");
 | 827 | 		list->pushBack(L"");
 | 
          
            | 828 | 	}
 | 828 | 	}
 | 
          
            | 829 |  
 | 829 |  
 | 
          
            | 830 | 	if ( m_lText.size() ) {
 | 830 | 	if ( m_lText.size() ) {
 | 
          
            | 831 | 		list->pushBack("# Ship Texts, the name/description of the ship in each language: <LANGID> <NAME>|<DESCRIPTION>");
 | 831 | 		list->pushBack(L"# Ship Texts, the name/description of the ship in each language: <LANGID> <NAME>|<DESCRIPTION>");
 | 
          
            | 832 | 		for(CListNode<SText> *node = m_lText.Front(); node; node = node->next()) {
 | 832 | 		for(CListNode<SText> *node = m_lText.Front(); node; node = node->next()) {
 | 
          
            | 833 | 			list->pushBack(Utils::String("ShipText: ") + (long)node->Data()->iId + " " + node->Data()->sName + "|"+ node->Data()->sDesc);
 | 833 | 			list->pushBack(Utils::WString(L"ShipText: ") + (long)node->Data()->iId + L" " + node->Data()->sName.toWString() + L"|" + node->Data()->sDesc.toWString());
 | 
          
            | 834 | 		}
 | 834 | 		}
 | 
          
            | 835 |  
 | 835 |  
 | 
          
            | 836 | 		list->pushBack("");
 | 836 | 		list->pushBack(L"");
 | 
          
            | 837 | 	}
 | 837 | 	}
 | 
          
            | 838 |  
 | 838 |  
 | 
          
            | 839 | 	if ( this->m_lWeaponMasks.size() ) {
 | 839 | 	if ( this->m_lWeaponMasks.size() ) {
 | 
          
            | 840 | 		list->pushBack("# Weapon Masks, the weapons for each game: <GAME> <MASK>");
 | 840 | 		list->pushBack(L"# Weapon Masks, the weapons for each game: <GAME> <MASK>");
 | 
          
            | 841 | 		for(CListNode<SWeaponMask> *node = m_lWeaponMasks.Front(); node; node = node->next()) {
 | 841 | 		for(CListNode<SWeaponMask> *node = m_lWeaponMasks.Front(); node; node = node->next()) {
 | 
          
            | 842 | 			list->pushBack(Utils::String("WeaponMask: ") + (long)node->Data()->iGame + " " + (long)node->Data()->iMask);
 | 842 | 			list->pushBack(Utils::WString(L"WeaponMask: ") + (long)node->Data()->iGame + L" " + (long)node->Data()->iMask);
 | 
          
            | 843 | 		}
 | 843 | 		}
 | 
          
            | 844 |  
 | 844 |  
 | 
          
            | 845 | 		list->pushBack("");
 | 845 | 		list->pushBack(L"");
 | 
          
            | 846 | 	}
 | 846 | 	}
 | 
          
            | 847 |  
 | 847 |  
 | 
          
            | 848 | 	if ( this->m_lMissileMasks.size() ) {
 | 848 | 	if ( this->m_lMissileMasks.size() ) {
 | 
          
            | 849 | 		list->pushBack("# Missile Masks, the missiles for each game: <GAME> <MASK>");
 | 849 | 		list->pushBack(L"# Missile Masks, the missiles for each game: <GAME> <MASK>");
 | 
          
            | 850 | 		for(CListNode<SWeaponMask> *node = m_lMissileMasks.Front(); node; node = node->next()) {
 | 850 | 		for(CListNode<SWeaponMask> *node = m_lMissileMasks.Front(); node; node = node->next()) {
 | 
          
            | 851 | 			list->pushBack(Utils::String("WeaponMask: ") + (long)node->Data()->iGame + " " + (long)node->Data()->iMask);
 | 851 | 			list->pushBack(Utils::WString(L"WeaponMask: ") + (long)node->Data()->iGame + L" " + (long)node->Data()->iMask);
 | 
          
            | 852 | 		}
 | 852 | 		}
 | 
          
            | 853 |  
 | 853 |  
 | 
          
            | 854 | 		list->pushBack("");
 | 854 | 		list->pushBack("");
 | 
          
            | 855 | 	}
 | 855 | 	}
 | 
          
            | 856 |  
 | 856 |  
 | 
          
            | 857 | 	if ( this->m_lComponent.size() ) {
 | 857 | 	if ( this->m_lComponent.size() ) {
 | 
          
            | 858 | 		list->pushBack("# Ship Components, each component used in the ships scene: <SECTION> <MODELENTRY> <VALUES>");
 | 858 | 		list->pushBack(L"# Ship Components, each component used in the ships scene: <SECTION> <MODELENTRY> <VALUES>");
 | 
          
            | 859 | 		for(CListNode<SComponent> *node = m_lComponent.Front(); node; node = node->next()) {
 | 859 | 		for(CListNode<SComponent> *node = m_lComponent.Front(); node; node = node->next()) {
 | 
          
            | 860 | 			list->pushBack(Utils::String("Component: ") + node->Data()->sSection + " " + node->Data()->sSection2 + " " + node->Data()->sData);
 | 860 | 			list->pushBack(Utils::WString(L"Component: ") + node->Data()->sSection.toWString() + L" " + node->Data()->sSection2.toWString() + L" " + node->Data()->sData.toWString());
 | 
          
            | 861 | 		}
 | 861 | 		}
 | 
          
            | 862 | 		list->pushBack("");
 | 862 | 		list->pushBack(L"");
 | 
          
            | 863 | 	}
 | 863 | 	}
 | 
          
            | 864 |  
 | 864 |  
 | 
          
            | 865 | 	if ( this->m_lDummy.size() ) {
 | 865 | 	if ( this->m_lDummy.size() ) {
 | 
          
            | 866 | 		list->pushBack("# Ship Dummies, each dummy entry used in the ships scene: <SECTION> <VALUE>");
 | 866 | 		list->pushBack(L"# Ship Dummies, each dummy entry used in the ships scene: <SECTION> <VALUE>");
 | 
          
            | 867 | 		for(CListNode<SDummy> *node = m_lDummy.Front(); node; node = node->next()) {
 | 867 | 		for(CListNode<SDummy> *node = m_lDummy.Front(); node; node = node->next()) {
 | 
          
            | 868 | 			list->pushBack("Dummy: " + node->Data()->sSection + " "+ node->Data()->sData);
 | 868 | 			list->pushBack(L"Dummy: " + node->Data()->sSection.toWString() + L" " + node->Data()->sData.toWString());
 | 
          
            | 869 | 		}
 | 869 | 		}
 | 
          
            | 870 | 		list->pushBack("");
 | 870 | 		list->pushBack(L"");
 | 
          
            | 871 | 	}
 | 871 | 	}
 | 
          
            | 872 |  
 | 872 |  
 | 
          
            | 873 | 	if ( this->m_lCockpit.size() ) {
 | 873 | 	if ( this->m_lCockpit.size() ) {
 | 
          
            | 874 | 		list->pushBack("# Cockpit entries, each cockpit value with thier weapons mask");
 | 874 | 		list->pushBack(L"# Cockpit entries, each cockpit value with thier weapons mask");
 | 
          
            | 875 | 		for(CListNode<SCockpit> *node = m_lCockpit.Front(); node; node = node->next()) {
 | 875 | 		for(CListNode<SCockpit> *node = m_lCockpit.Front(); node; node = node->next()) {
 | 
          
            | 876 | 			list->pushBack("Cockpit: " + node->Data()->sCockpit.token(";", 19) + " " + node->Data()->sCockpit);
 | 876 | 			list->pushBack(L"Cockpit: " + node->Data()->sCockpit.toWString().token(L";", 19) + L" " + node->Data()->sCockpit.toWString());
 | 
          
            | 877 | 			for(SWeaponMask *mask = node->Data()->lWeaponMask.First(); mask; mask = node->Data()->lWeaponMask.Next()) {
 | 877 | 			for(SWeaponMask *mask = node->Data()->lWeaponMask.First(); mask; mask = node->Data()->lWeaponMask.Next()) {
 | 
          
            | 878 | 				list->pushBack("CockpitWeapon: " + node->Data()->sCockpit.token(";", 19) + " " + (long)mask->iGame + " " + (long)mask->iMask);
 | 878 | 				list->pushBack(L"CockpitWeapon: " + node->Data()->sCockpit.toWString().token(L";", 19) + L" " + (long)mask->iGame + L" " + (long)mask->iMask);
 | 
          
            | 879 | 			}
 | 879 | 			}
 | 
          
            | 880 | 		}
 | 880 | 		}
 | 
          
            | 881 |  
 | 881 |  
 | 
          
            | 882 | 		list->pushBack("");
 | 882 | 		list->pushBack(L"");
 | 
          
            | 883 | 	}
 | 883 | 	}
 | 
          
            | 884 |  
 | 884 |  
 | 
          
            | 885 | 	if (!this->_lCutData.empty())
 | 885 | 	if (!this->_lCutData.empty())
 | 
          
            | 886 | 	{
 | 886 | 	{
 | 
          
            | 887 | 		list->pushBack("# Ship Cut Data");
 | 887 | 		list->pushBack(L"# Ship Cut Data");
 | 
          
            | 888 | 		for(auto itr = _lCutData.begin(); itr != _lCutData.end(); itr++)
 | 888 | 		for(auto itr = _lCutData.begin(); itr != _lCutData.end(); itr++)
 | 
          
            | 889 | 			list->pushBack("CutData: " + (*itr)->str);
 | 889 | 			list->pushBack(L"CutData: " + (*itr)->str.toWString());
 | 
          
            | 890 | 		list->pushBack("");
 | 890 | 		list->pushBack(L"");
 | 
          
            | 891 | 	}
 | 891 | 	}
 | 
          
            | 892 |  
 | 892 |  
 | 
          
            | 893 | 	if (!this->_lBodies.empty())
 | 893 | 	if (!this->_lBodies.empty())
 | 
          
            | 894 | 	{
 | 894 | 	{
 | 
          
            | 895 | 		list->pushBack("# Ship Bodies");
 | 895 | 		list->pushBack(L"# Ship Bodies");
 | 
          
            | 896 | 		for(auto itr = _lBodies.begin(); itr != _lBodies.end(); itr++)
 | 896 | 		for(auto itr = _lBodies.begin(); itr != _lBodies.end(); itr++)
 | 
          
            | 897 | 			list->pushBack("Bodies: " + (*itr)->str);
 | 897 | 			list->pushBack(L"Bodies: " + (*itr)->str.toWString());
 | 
          
            | 898 | 		list->pushBack("");
 | 898 | 		list->pushBack(L"");
 | 
          
            | 899 | 	}
 | 899 | 	}
 | 
          
            | 900 |  
 | 900 |  
 | 
          
            | 901 | 	if (!this->_lAnimations.empty())
 | 901 | 	if (!this->_lAnimations.empty())
 | 
          
            | 902 | 	{
 | 902 | 	{
 | 
          
            | 903 | 		list->pushBack("# Ship Animations");
 | 903 | 		list->pushBack(L"# Ship Animations");
 | 
          
            | 904 | 		for (auto itr = _lAnimations.begin(); itr != _lAnimations.end(); itr++)
 | 904 | 		for (auto itr = _lAnimations.begin(); itr != _lAnimations.end(); itr++)
 | 
          
            | 905 | 			list->pushBack("Animation: " + (*itr)->str);	
 | 905 | 			list->pushBack(L"Animation: " + (*itr)->str.toWString());	
 | 
          
            | 906 | 		list->pushBack("");
 | 906 | 		list->pushBack(L"");
 | 
          
            | 907 | 	}
 | 907 | 	}
 | 
          
            | 908 |  
 | 908 |  
 | 
          
            | 909 | 	if ( !datafile )
 | 909 | 	if ( !datafile )
 | 
          
            | 910 | 	{
 | 910 | 	{
 | 
          
            | 911 | 		if ( !CBaseFile::GeneratePackagerScriptFile(wildcard, list, game, gameAddons) )
 | 911 | 		if ( !CBaseFile::GeneratePackagerScriptFile(wildcard, list, game, gameAddons) )
 |