Files
source/TileEngine/XML_TileSet.hpp
MaddMugsy 49a590ed34 1. PItems are now variable, from 3-20 and can be set in JA2Options.ini via NUM_P_ITEMS
2. USE_XML_TILESETS moved from JA2.ini to JA2Options.ini
3. New Feature - Ctrl+Click on an item with an item in hand to auto-attach/merge them.  Attach works with stacks.  Merge only works on single items, for now at least.
4. New Feature - To accompany Quiet Training, there are now Quiet Repairing and Quiet Doctoring options.
5. Bugfix - inseparable attachments of attachments were getting lost again when using ctrl+f/the map screen button to remove attachments
6. Bugfix - INT8 overflow error causing vehicle repair to actually lower its status
7. GasMask tag in items.xml can now be applied to helmets as well as face items.
8. Bugfix - AI code was referencing hard coded GASMASK item number instead of looking for the tag
9. Bugfix - "break;" was removed in Explosion Control.cpp, thereby causing mustard gas to deal out fire damage. (Not sure if this was deliberate?  But the new implementation differs from the JA2 standard, so it should be added to JA2Options.ini at least)

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@5320 3b4a5df2-a311-0410-b5c6-a8a6f20db521
2012-05-30 10:19:53 +00:00

126 lines
3.6 KiB
C++

#ifndef _XML_TILESET_HPP_
#define _XML_TILESET_HPP_
#include "XML_auto_parse.h"
#include "WorldDat.h"
#include <vfs/Tools/vfs_tools.h>
class CTilesetStates
{
public:
enum States
{
STATE_NONE,
STATE_JA2SET,
STATE_tilesets,
STATE_ts_tileset,
STATE_ts_tileset_name,
STATE_ts_tileset_ambientid,
STATE_ts_tileset_files,
STATE_ts_tileset_files_file,
};
};
PARSER_CLASS_MACRO(CTilesetReader, CTilesetStates)
{
typedef CTilesetReader _myt;
public:
/**
* NOOP
*/
PURE_TRANSITION(NOOP, _myt);
/**
* Tilesets
*/
DEFINE_TRANSITION_WDATA(TilesetsAttrib, _myt, false, struct TilesetInfo{int numTilesets; int numFiles;});
TRANSITION_ENTER{
long T_num, F_num;
if(atts.getLong("numTilesets", T_num)) T_DATA.numTilesets = (int)T_num;
else SGP_THROW(L"Attribute 'numTileset' not found");
if(atts.getLong("numFiles",F_num)) T_DATA.numFiles = (int)F_num ;
else SGP_THROW(L"Attribute 'numFiles' not found");
}
FINISH_TRANSITION;
/**
* Tileset
*/
TILESET* _current_tileset;
DEFINE_TRANSITION(Tileset, _myt, false);
TRANSITION_ENTER{
long lindex;
if(atts.getLong("index", lindex)){
SGP_THROW_IFFALSE(lindex < MAX_TILESETS, _BS(L"tileset index is too large : ") << lindex << _BS::wget );
P_DATA->_current_tileset = &(P_DATA->_tilesets[ lindex ]);
}
else SGP_THROW(L"Attribute 'index' not found");
}
TRANSITION_LEAVE{
P_DATA->_current_tileset = NULL;
}
FINISH_TRANSITION;
/**
* Tileset Name
*/
DEFINE_TRANSITION(TilesetName, _myt, true);
TRANSITION_LEAVE{
SGP_THROW_IFFALSE( P_DATA->_current_tileset != NULL, L"No tileset selected" );
std::string tmpString = vfs::trimString(char_data, 0, char_data.length());
wcsncpy( P_DATA->_current_tileset->zName, vfs::String( tmpString ).c_str(), 32 );
}
FINISH_TRANSITION;
/**
* Tileset ID
*/
DEFINE_TRANSITION(TilesetAmbientID, _myt, true);
TRANSITION_LEAVE{
SGP_THROW_IFFALSE( P_DATA->_current_tileset != NULL, L"No tileset selected" );
int tmp;
SGP_THROW_IFFALSE( vfs::convertTo<int>(char_data, tmp),
_BS(L"Could not convert to int : ") << char_data << _BS::wget );
P_DATA->_current_tileset->ubAmbientID = tmp;
}
FINISH_TRANSITION;
/**
* Tileset File
*/
DEFINE_TRANSITION_WDATA(TilesetFile, _myt, true, struct Index{int index;});
TRANSITION_ENTER{
long lindex;
if(atts.getLong("index", lindex)){
SGP_THROW_IFFALSE(lindex < giNumberOfTileTypes,
_BS(L"tileset file index is too large : ") << lindex << _BS::wget );
T_DATA.index = lindex;
}
else SGP_THROW(L"Attribute 'index' not found");
}
TRANSITION_LEAVE{
SGP_THROW_IFFALSE( P_DATA->_current_tileset != NULL, L"No tileset selected" );
std::string tmpString = vfs::trimString(char_data, 0, char_data.length());
strncpy( P_DATA->_current_tileset->TileSurfaceFilenames[T_DATA.index], tmpString.c_str(), 32);
}
FINISH_TRANSITION;
TILESET* _tilesets;
CTilesetReader(TILESET tilesets[ MAX_TILESETS ]) : _tilesets(tilesets), _current_tileset(NULL)
{
TR_PASS ( STATE_NONE, "JA2SET", STATE_JA2SET);
TR_HANDLE( STATE_JA2SET, "tilesets", STATE_tilesets, TilesetsAttrib );
TR_HANDLE( STATE_tilesets, "Tileset", STATE_ts_tileset, Tileset );
TR_HANDLE( STATE_ts_tileset, "Name", STATE_ts_tileset_name, TilesetName );
TR_HANDLE( STATE_ts_tileset, "AmbientID", STATE_ts_tileset_ambientid, TilesetAmbientID );
TR_PASS ( STATE_ts_tileset, "Files", STATE_ts_tileset_files );
TR_HANDLE( STATE_ts_tileset_files, "file", STATE_ts_tileset_files_file, TilesetFile );
}
};
#endif // _XML_TILESET_HPP_