Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

/home/groups/n/no/noxwizard/cvs/src/data.h

Go to the documentation of this file.
00001   /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
00002     || NoX-Wizard UO Server Emulator (NXW) [http://noxwizard.sourceforge.net]  ||
00003     ||                                                                         ||
00004     || This software is free software released under GPL2 license.             ||
00005     || You can find detailed license information in nox-wizard.cpp file.       ||
00006     ||                                                                         ||
00007     || For any question post to NoX-Wizard forums.                             ||
00008     -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
00009 
00010 #ifndef __DATA_H__
00011 #define __DATA_H__
00012 
00019 extern UI16 map_width;
00020 extern UI16 map_height;
00021 extern LOGICAL statics_cache;
00022 extern LOGICAL map_cache;
00023 
00027 enum {
00028         MAP_HEADER_SIZE = 4, MAP_BLOCK_SIZE = 196,
00029         TILE_HEADER_SIZE = 4, TILEDATA_LAND_SIZE = 0x68800,
00030         VERDATA_HEADER_SIZE = 4
00031 };
00032 
00036 enum VerFile {
00037         VerMap = 0x00,
00038         VerStaIdx,
00039         VerStatics,
00040         VerArtIdx,
00041         VerArt,
00042         VerAnimIdx,
00043         VerAnim,
00044         VerSoundIdx,
00045         VerSound,
00046         VerTexIdx,
00047         VerTexMaps,
00048         VerGumpIdx,
00049         VerGumpArt,
00050         VerMultiIdx,
00051         VerMulti,
00052         VerSkillsIdx,
00053         VerSkills,
00054         VerTileData = 0x1E,
00055         VerAnimData
00056 };
00057 
00061 enum MulFileId {
00062         Map_File = 0, StaIdx_File, Statics_File, Multi_File, MultiIdx_File, TileData_File, VerData_File
00063 };
00064 
00065 
00066 struct map_st {
00067         UI16 id;
00068         SI08 z;
00069 } PACK_NEEDED;
00070 
00071 struct staticIdx_st {
00072         SI32 start;
00073         SI32 length;
00074         SI32 unknown;
00075 } PACK_NEEDED;
00076 
00077 struct static_st {
00078         UI16 id;
00079         UI08 xoff;
00080         UI08 yoff;
00081         SI08 z;
00082         UI16 unknown;
00083 } PACK_NEEDED;
00084 
00085 typedef std::vector< static_st > staticVector;
00086 
00087 struct land_st
00088 {
00089         UI32 flags;
00090         UI16 id;
00091         TEXT name[20];
00092 } PACK_NEEDED;
00093 
00094 struct tile_st
00095 {
00096         UI32 flags;
00097         UI08 weight;
00098         UI08 quality; // if wearable, it's the layer. if it's a light source, it's the light id.
00099         UI16 unknown;
00100         UI08 unknown1;
00101         UI08 quantity;
00102         UI16 animid;
00103         UI08 unknown2;
00104         UI08 hue;
00105         UI16 unknown3;
00106         SI08 height;
00107         TEXT name[20];
00108 } PACK_NEEDED;
00109 
00110 struct multiIdx_st {
00111         SI32 start;
00112         SI32 length;
00113         SI32 unknown;
00114 } PACK_NEEDED;
00115 
00116 struct multi_st {
00117         SI16 block;
00118         SI16 x;
00119         SI16 y;
00120         SI16 height;
00121         UI32 flags;
00122 } PACK_NEEDED;
00123 
00124 typedef std::vector< multi_st > multiVector;
00125 
00129 struct verdata_st
00130 {
00131         SI32 fileid;
00132         SI32 block;
00133         SI32 pos;
00134         SI32 size;
00135         SI32 various;
00136 } PACK_NEEDED;
00137 
00141 enum {
00142         TILEFLAG_BACKGROUND     =       0x00000001,
00143         TILEFLAG_WEAPON         =       0x00000002,
00144         TILEFLAG_TRANSPARENT    =       0x00000004,
00145         TILEFLAG_TRANSLUCENT    =       0x00000008,
00146         TILEFLAG_WALL           =       0x00000010,
00147         TILEFLAG_DAMAGING       =       0x00000020,
00148         TILEFLAG_IMPASSABLE     =       0x00000040,
00149         TILEFLAG_WET            =       0x00000080,
00150         TILEFLAG_SURFACE        =       0x00000200,
00151         TILEFLAG_BRIDGE         =       0x00000400,
00152         TILEFLAG_STACKABLE      =       0x00000800,
00153         TILEFLAG_WINDOW         =       0x00001000,
00154         TILEFLAG_NOSHOOT        =       0x00002000,
00155         TILEFLAG_PREFIX_A       =       0x00004000,
00156         TILEFLAG_PREFIX_AN      =       0x00008000,
00157         TILEFLAG_INTERNAL       =       0x00010000,
00158         TILEFLAG_FOLIAGE        =       0x00020000,
00159         TILEFLAG_PARTIAL_HUE    =       0x00040000,
00160         TILEFLAG_MAP            =       0x00100000,
00161         TILEFLAG_CONTAINER      =       0x00200000,
00162         TILEFLAG_WEARABLE       =       0x00400000,
00163         TILEFLAG_LIGHTSOURCE    =       0x00800000,
00164         TILEFLAG_ANIMATED       =       0x01000000,
00165         TILEFLAG_NODIAGONAL     =       0x02000000,
00166         TILEFLAG_ARMOR          =       0x08000000,
00167         TILEFLAG_ROOF           =       0x10000000,
00168         TILEFLAG_DOOR           =       0x20000000,
00169         TILEFLAG_STAIR_BACK     =       0x40000000,
00170         TILEFLAG_STAIR_RIGHT    =       0x80000000
00171 };
00172 
00173 
00174 const UI08 verdata_st_size = sizeof( verdata_st );
00175 const UI08 multi_st_size = sizeof( multi_st );
00176 const UI08 multiIdx_st_size = sizeof( multiIdx_st );
00177 const UI08 tile_st_size = sizeof( tile_st );
00178 const UI08 land_st_size = sizeof( land_st );
00179 const UI08 static_st_size = sizeof( static_st );
00180 const UI08 staticIdx_st_size = sizeof( staticIdx_st );
00181 const UI08 map_st_size = sizeof( map_st );
00182 
00183 
00187 namespace data {
00188 
00189 void init();
00190 void shutdown();
00191 void setPath( MulFileId id, std::string path );
00192 std::string getPath( MulFileId id );
00193 
00194 LOGICAL seekMap( UI32 x, UI32 y, map_st& m, UI08 nMap = 0 ); //<! Luxor: nMap will be used for future multiple maps support.
00195 LOGICAL collectStatics( UI32 x, UI32 y, staticVector& s_vec );
00196 LOGICAL seekLand( UI16 id, land_st& land );
00197 LOGICAL seekTile( UI16 id, tile_st& tile );
00198 LOGICAL seekMulti( UI16 id, multiVector& m_vec );
00199 LOGICAL seekVerTile( UI16 id, tile_st& tile );
00200 LOGICAL seekVerLand( UI16 id, land_st& land );
00201 
00205 template <typename T> class cMULFile {
00206 public:
00207         cMULFile( std::string path, std::string mode );
00208         ~cMULFile() {
00209                 if ( m_file != NULL )
00210                         fclose( m_file );
00211                 if ( m_cache != NULL )
00212                         safedelete( m_cache );
00213         }
00214         LOGICAL getData( UI32 index, T& data );
00215         LOGICAL getData( UI32 index, BYTE* ptr, UI32 size );
00216         void setCache( std::map< UI32, T > *cache );
00217         LOGICAL eof();
00218         inline LOGICAL isReady() { return ( m_file != NULL ); }
00219         inline LOGICAL isCached() { return ( m_cache != NULL ); }
00220 private:
00221         FILE    *m_file;
00222         std::map< UI32, T > *m_cache;
00223 };
00224 
00225 } // namespace data
00226 
00227 #endif // __DATA_H__
00228 
SourceForge.net Logo