From 369f0ae9c6c2df7680a67b092d559620c3e4020f Mon Sep 17 00:00:00 2001 From: alexvins Date: Sat, 15 Sep 2012 19:16:16 +0000 Subject: [PATCH] [PLATFORM] MinGW support added * disabled features unsupported by MinGW * fixed issues with DLL_LINKAGE ! BOOST_THREAD_VERSION in now 3 workaround for existing code added, consider refactoring. * some small tweaks ("-fpedantic" warnings) --- Global.h | 11 ++ client/BattleInterface/CBattleInterface.h | 2 +- client/CBitmapHandler.h | 2 +- client/CDefHandler.cpp | 2 +- client/CPlayerInterface.h | 12 +- client/CPreGame.h | 2 +- client/CVideoHandler.cpp | 61 +++++----- client/UIFramework/CGuiHandler.h | 8 +- client/UIFramework/CIntObjectClasses.cpp | 36 +++--- client/UIFramework/SDL_Extensions.h | 2 +- lib/CArtHandler.cpp | 130 +++++++++++----------- lib/CConsoleHandler.cpp | 11 +- lib/CCreatureSet.h | 10 +- lib/CObjectHandler.cpp | 6 +- lib/CThreadHelper.cpp | 10 +- lib/Connection.h | 38 +++---- lib/HeroBonus.h | 46 ++++---- lib/NetPacks.h | 86 +++++++------- lib/ResourceSet.h | 20 ++-- 19 files changed, 259 insertions(+), 236 deletions(-) diff --git a/Global.h b/Global.h index dbc69c880..a4cf3b7c7 100644 --- a/Global.h +++ b/Global.h @@ -51,6 +51,9 @@ //The only available version is 3, as of Boost 1.50 #define BOOST_FILESYSTEM_VERSION 3 +#define BOOST_THREAD_VERSION 3 +#define BOOST_THREAD_DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE 1 +//#define BOOST_SYSTEM_NO_DEPRECATED 1 #include #include @@ -97,7 +100,11 @@ typedef boost::int8_t si8; //signed int 8 bits (1 byte) // Import + Export macro declarations #ifdef _WIN32 +#ifdef __GNUC__ +#define DLL_EXPORT __attribute__((dllexport)) +#else #define DLL_EXPORT __declspec(dllexport) +#endif #else #if defined(__GNUC__) && GCC_VERSION >= 400 #define DLL_EXPORT __attribute__ ((visibility("default"))) @@ -107,7 +114,11 @@ typedef boost::int8_t si8; //signed int 8 bits (1 byte) #endif #ifdef _WIN32 +#ifdef __GNUC__ +#define DLL_IMPORT __attribute__((dllimport)) +#else #define DLL_IMPORT __declspec(dllimport) +#endif #else #if defined(__GNUC__) && GCC_VERSION >= 400 #define DLL_IMPORT __attribute__ ((visibility("default"))) diff --git a/client/BattleInterface/CBattleInterface.h b/client/BattleInterface/CBattleInterface.h index ec4d4fb4e..bdc72ba2c 100644 --- a/client/BattleInterface/CBattleInterface.h +++ b/client/BattleInterface/CBattleInterface.h @@ -29,7 +29,7 @@ struct BattleResult; struct BattleSpellCast; struct CObstacleInstance; template struct CondSh; -struct SetStackEffect;; +struct SetStackEffect; struct BattleAction; class CGTownInstance; struct CatapultAttack; diff --git a/client/CBitmapHandler.h b/client/CBitmapHandler.h index 89275432f..4823b04e9 100644 --- a/client/CBitmapHandler.h +++ b/client/CBitmapHandler.h @@ -27,4 +27,4 @@ namespace BitmapHandler SDL_Surface * loadBitmapFromDir(std::string path, std::string fname, bool setKey=true); //Load file from any LODs SDL_Surface * loadBitmap(std::string fname, bool setKey=true); -}; +} diff --git a/client/CDefHandler.cpp b/client/CDefHandler.cpp index 7e8c2f23e..53ec28dc1 100644 --- a/client/CDefHandler.cpp +++ b/client/CDefHandler.cpp @@ -351,7 +351,7 @@ SDL_Surface * CDefHandler::getSprite (int SIndex, const ui8 * FDef, const BMPPal Uint32 keycol = SDL_MapRGBA(ret->format, ttcol.r, ttcol.b, ttcol.g, ttcol.unused); SDL_SetColorKey(ret, SDL_SRCCOLORKEY, keycol); return ret; -}; +} CDefEssential * CDefHandler::essentialize() { diff --git a/client/CPlayerInterface.h b/client/CPlayerInterface.h index 091ae030f..6a4c2f9e6 100644 --- a/client/CPlayerInterface.h +++ b/client/CPlayerInterface.h @@ -7,7 +7,7 @@ #include "UIFramework/CIntObject.h" #ifdef __GNUC__ -#define sprintf_s snprintf +#define sprintf_s snprintf #endif #ifdef max @@ -69,9 +69,9 @@ namespace boost { class mutex; class recursive_mutex; -}; +} -enum +enum { /*CHANGE_SCREEN_RESOLUTION = 1,*/ RETURN_TO_MAIN_MENU = 2, @@ -100,7 +100,7 @@ public: CCastleInterface * castleInt; //NULL if castle window isn't opened static CBattleInterface * battleInt; //NULL if no battle CInGameConsole * cingconsole; - + CCallback * cb; //to communicate with engine const BattleAction *curAction; //during the battle - action currently performed by active stack (or NULL) @@ -155,7 +155,7 @@ public: void receivedResource(int type, int val) OVERRIDE; void showInfoDialog(const std::string &text, const std::vector &components, int soundID) OVERRIDE; void showRecruitmentDialog(const CGDwelling *dwelling, const CArmedInstance *dst, int level) OVERRIDE; - void showShipyardDialog(const IShipyard *obj) OVERRIDE; //obj may be town or shipyard; + void showShipyardDialog(const IShipyard *obj) OVERRIDE; //obj may be town or shipyard; void showBlockingDialog(const std::string &text, const std::vector &components, ui32 askID, int soundID, bool selection, bool cancel) OVERRIDE; //Show a dialog, player must take decision. If selection then he has to choose between one of given components, if cancel he is allowed to not choose. After making choice, CCallback::selectionMade should be called with number of selected component (1 - n) or 0 for cancel (if allowed) and askID. void showGarrisonDialog(const CArmedInstance *up, const CGHeroInstance *down, bool removableUnits, int queryID) OVERRIDE; void showPuzzleMap() OVERRIDE; @@ -234,7 +234,7 @@ public: CGPath *getAndVerifyPath( const CGHeroInstance * h ); void acceptTurn(); //used during hot seat after your turn message is close void tryDiggging(const CGHeroInstance *h); - void showShipyardDialogOrProblemPopup(const IShipyard *obj); //obj may be town or shipyard; + void showShipyardDialogOrProblemPopup(const IShipyard *obj); //obj may be town or shipyard; void requestReturningToMainMenu(); void requestStoppingClient(); void sendCustomEvent(int code); diff --git a/client/CPreGame.h b/client/CPreGame.h index b086b3a83..b3eba3290 100644 --- a/client/CPreGame.h +++ b/client/CPreGame.h @@ -124,7 +124,7 @@ public: CPicture *playerListBg; CHighlightableButtonsGroup *difficulty; - CDefHandler *sizes, *sFlags;; + CDefHandler *sizes, *sFlags; void changeSelection(const CMapInfo *to); void showAll(SDL_Surface * to); diff --git a/client/CVideoHandler.cpp b/client/CVideoHandler.cpp index bd00b3504..80d210ca9 100644 --- a/client/CVideoHandler.cpp +++ b/client/CVideoHandler.cpp @@ -47,7 +47,7 @@ void checkForError(bool throwing = true) void blitBuffer(char *buffer, int x, int y, int w, int h, SDL_Surface *dst) { - const int bpp = dst->format->BytesPerPixel; + const int bpp = dst->format->BytesPerPixel; char *dest; for(int i = h; i > 0; i--) { @@ -142,10 +142,13 @@ bool CBIKHandler::open(std::string name) tlog1 << "BIK handler: failed to open " << name << std::endl; goto checkErrorAndClean; } + //GCC wants scope of waveout to dont cross labels/swith/goto + { + void *waveout = GetProcAddress(dll,"_BinkOpenWaveOut@4"); + if(waveout) + binkSetSoundSystem(waveout,NULL); - void *waveout = GetProcAddress(dll,"_BinkOpenWaveOut@4"); - if(waveout) - binkSetSoundSystem(waveout,NULL); + } hBink = binkOpen(hBinkFile, 0x8a800000); if(!hBink) @@ -166,8 +169,8 @@ checkErrorAndClean: void CBIKHandler::show( int x, int y, SDL_Surface *dst, bool update ) { - const int w = hBink->width, - h = hBink->height, + const int w = hBink->width, + h = hBink->height, Bpp = dst->format->BytesPerPixel; int mode = -1; @@ -298,7 +301,7 @@ bool CSmackPlayer::open( std::string name ) Uint32 flags[2] = {0xff400, 0xfe400}; data = ptrSmackOpen( (void*)name.c_str(), flags[1], -1); - if (!data) + if (!data) { tlog1 << "Smack cannot open " << name << std::endl; checkForError(); @@ -337,9 +340,9 @@ void CSmackPlayer::redraw( int x, int y, SDL_Surface *dst, bool update ) { int w = std::min(data->width, dst->w - x), h = std::min(data->height, dst->h - y); /* Lock the screen for direct access to the pixels */ - if ( SDL_MUSTLOCK(dst) ) + if ( SDL_MUSTLOCK(dst) ) { - if ( SDL_LockSurface(dst) < 0 ) + if ( SDL_LockSurface(dst) < 0 ) { fprintf(stderr, "Can't lock screen: %s\n", SDL_GetError()); return; @@ -374,7 +377,7 @@ void CSmackPlayer::redraw( int x, int y, SDL_Surface *dst, bool update ) //convert rgb 555 to 565 Uint16 pixel = *addr; Uint16 *p = (Uint16 *)((Uint8 *)dst->pixels + (j+y) * dst->pitch + (i + x) * dst->format->BytesPerPixel); - *p = (pixel & 0x1F) + *p = (pixel & 0x1F) + ((pixel & 0x3e0) << 1) + ((pixel & 0x7c00) << 1); @@ -383,7 +386,7 @@ void CSmackPlayer::redraw( int x, int y, SDL_Surface *dst, bool update ) } } - if ( SDL_MUSTLOCK(dst) ) + if ( SDL_MUSTLOCK(dst) ) { SDL_UnlockSurface(dst); } @@ -425,7 +428,7 @@ bool CVideoPlayer::open(std::string name) out.exceptions(std::ifstream::failbit | std::ifstream::badbit); out.write(data.get(), myVideo->getSize()); } - + current->open(name); return true; } @@ -526,7 +529,7 @@ void CVideoPlayer::update( int x, int y, SDL_Surface *dst, bool forceRedraw, boo - if(!w) + if(!w) { show(x,y,dst,update); } @@ -700,7 +703,7 @@ bool CVideoPlayer::open(std::string fname) bool CVideoPlayer::open(std::string fname, bool loop, bool useOverlay) { close(); - + this->fname = fname; offset = 0; refreshWait = 3; @@ -790,7 +793,7 @@ bool CVideoPlayer::open(std::string fname, bool loop, bool useOverlay) // Unsupported codec return false; } - + // Open codec #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(53, 6, 0) if ( avcodec_open(codecContext, codec) < 0 ) @@ -802,7 +805,7 @@ bool CVideoPlayer::open(std::string fname, bool loop, bool useOverlay) codec = NULL; return false; } - + // Allocate video frame frame = avcodec_alloc_frame(); @@ -826,8 +829,8 @@ bool CVideoPlayer::open(std::string fname, bool loop, bool useOverlay) // Convert the image into YUV format that SDL uses if (overlay) { - sws = sws_getContext(codecContext->width, codecContext->height, - codecContext->pix_fmt, codecContext->width, codecContext->height, + sws = sws_getContext(codecContext->width, codecContext->height, + codecContext->pix_fmt, codecContext->width, codecContext->height, PIX_FMT_YUV420P, SWS_BICUBIC, NULL, NULL, NULL); } else @@ -842,8 +845,8 @@ bool CVideoPlayer::open(std::string fname, bool loop, bool useOverlay) default: return false; } - sws = sws_getContext(codecContext->width, codecContext->height, - codecContext->pix_fmt, codecContext->width, codecContext->height, + sws = sws_getContext(codecContext->width, codecContext->height, + codecContext->pix_fmt, codecContext->width, codecContext->height, screenFormat, SWS_BICUBIC, NULL, NULL, NULL); } @@ -905,7 +908,7 @@ bool CVideoPlayer::nextFrame() if (overlay) { SDL_LockYUVOverlay(overlay); - + pict.data[0] = overlay->pixels[0]; pict.data[1] = overlay->pixels[2]; pict.data[2] = overlay->pixels[1]; @@ -945,7 +948,7 @@ void CVideoPlayer::show( int x, int y, SDL_Surface *dst, bool update ) pos.x = x; pos.y = y; CSDL_Ext::blitSurface(dest, &destRect, dst, &pos); - + if (update) SDL_UpdateRect(dst, pos.x, pos.y, pos.w, pos.h); } @@ -968,14 +971,14 @@ void CVideoPlayer::update( int x, int y, SDL_Surface *dst, bool forceRedraw, boo else { open(fname); - nextFrame(); - + nextFrame(); + // The y position is wrong at the first frame. // Note: either the windows player or the linux player is - // broken. Compensate here until the bug is found. + // broken. Compensate here until the bug is found. show(x, y--, dst, update); } - } + } else { redraw(x, y, dst, update); @@ -986,7 +989,7 @@ void CVideoPlayer::update( int x, int y, SDL_Surface *dst, bool forceRedraw, boo void CVideoPlayer::close() { - fname = ""; + fname = ""; if (sws) { sws_freeContext(sws); @@ -1049,7 +1052,7 @@ bool CVideoPlayer::playVideo(int x, int y, SDL_Surface *dst, bool stopOnKey) while(nextFrame()) { - + if(stopOnKey && keyDown()) return false; @@ -1071,7 +1074,7 @@ bool CVideoPlayer::openAndPlayVideo(std::string name, int x, int y, SDL_Surface close(); return ret; } - + CVideoPlayer::~CVideoPlayer() { close(); diff --git a/client/UIFramework/CGuiHandler.h b/client/UIFramework/CGuiHandler.h index 9125931d7..748b728f0 100644 --- a/client/UIFramework/CGuiHandler.h +++ b/client/UIFramework/CGuiHandler.h @@ -89,11 +89,11 @@ public: ui8 defActionsDef; //default auto actions ui8 captureChildren; //all newly created objects will get their parents from stack and will be added to parents children list std::list createdObj; //stack of objs being created - + static SDLKey arrowToNum(SDLKey key); //converts arrow key to according numpad key static SDLKey numToDigit(SDLKey key);//converts numpad digit key to normal digit key static bool isNumKey(SDLKey key, bool number = true); //checks if key is on numpad (numbers - check only for numpad digits) - static bool isArrowKey(SDLKey key); + static bool isArrowKey(SDLKey key); static bool amIGuiThread(); static void pushSDLEvent(int type, int usercode = 0); }; @@ -122,8 +122,8 @@ struct SSetCaptureState namespace Colors { - -}; + +} #define OBJ_CONSTRUCTION SObjectConstruction obj__i(this) #define OBJ_CONSTRUCTION_CAPTURING_ALL defActions = 255; SSetCaptureState obj__i1(true, 255); SObjectConstruction obj__i(this) diff --git a/client/UIFramework/CIntObjectClasses.cpp b/client/UIFramework/CIntObjectClasses.cpp index 6bbd49b92..abde71da4 100644 --- a/client/UIFramework/CIntObjectClasses.cpp +++ b/client/UIFramework/CIntObjectClasses.cpp @@ -22,7 +22,7 @@ CPicture::CPicture( SDL_Surface *BG, int x, int y, bool Free ) { init(); - bg = BG; + bg = BG; freeSurf = Free; pos.x += x; pos.y += y; @@ -33,7 +33,7 @@ CPicture::CPicture( SDL_Surface *BG, int x, int y, bool Free ) CPicture::CPicture( const std::string &bmpname, int x, int y ) { init(); - bg = BitmapHandler::loadBitmap(bmpname); + bg = BitmapHandler::loadBitmap(bmpname); freeSurf = true;; pos.x += x; pos.y += y; @@ -315,12 +315,12 @@ void CAdventureMapButton::clickLeft(tribool down, bool previousState) if(isBlocked()) return; - if (down) + if (down) { if (!soundDisabled) CCS->soundh->playSound(soundBase::button); setState(PRESSED); - } + } else if(hoverable && hovered) setState(HIGHLIGHTED); else @@ -355,8 +355,8 @@ void CAdventureMapButton::hover (bool on) if(pressedL && on) setState(PRESSED); - std::string *name = (vstd::contains(hoverTexts,getState())) - ? (&hoverTexts[getState()]) + std::string *name = (vstd::contains(hoverTexts,getState())) + ? (&hoverTexts[getState()]) : (vstd::contains(hoverTexts,0) ? (&hoverTexts[0]) : NULL); if(name && name->size() && !isBlocked()) //if there is no name, there is nohing to display also { @@ -533,7 +533,7 @@ void CHighlightableButtonsGroup::addButton(const std::map &tool bt->callback += boost::bind(&CHighlightableButtonsGroup::selectionChanged,this,bt->ID); bt->onlyOn = true; buttons.push_back(bt); -} +} CHighlightableButtonsGroup::CHighlightableButtonsGroup(const CFunctionList2 &OnChange, bool musicLikeButtons) : onChange(OnChange), musicLike(musicLikeButtons) @@ -597,7 +597,7 @@ void CHighlightableButtonsGroup::showAll(SDL_Surface * to) void CHighlightableButtonsGroup::block( ui8 on ) { - for(size_t i=0;iblock(on); } @@ -614,7 +614,7 @@ void CSlider::mouseMoved (const SDL_MouseMotionEvent & sEvent) double v = 0; if(horizontal) { - if( std::abs(sEvent.y-(pos.y+pos.h/2)) > pos.h/2+40 || std::abs(sEvent.x-(pos.x+pos.w/2)) > pos.w/2 ) + if( std::abs(sEvent.y-(pos.y+pos.h/2)) > pos.h/2+40 || std::abs(sEvent.x-(pos.x+pos.w/2)) > pos.w/2 ) return; v = sEvent.x - pos.x - 24; v *= positions; @@ -622,7 +622,7 @@ void CSlider::mouseMoved (const SDL_MouseMotionEvent & sEvent) } else { - if(std::abs(sEvent.x-(pos.x+pos.w/2)) > pos.w/2+40 || std::abs(sEvent.y-(pos.y+pos.h/2)) > pos.h/2 ) + if(std::abs(sEvent.x-(pos.x+pos.w/2)) > pos.w/2+40 || std::abs(sEvent.y-(pos.y+pos.h/2)) > pos.h/2 ) return; v = sEvent.y - pos.y - 24; v *= positions; @@ -746,7 +746,7 @@ CSlider::CSlider(int x, int y, int totalw, boost::function Moved, int left->pos.x = pos.x; right->pos.x = pos.x + totalw - 16; } - else + else { left->pos.x = slider->pos.x = right->pos.x = pos.x; left->pos.y = pos.y; @@ -859,7 +859,7 @@ void CSlider::keyPressed(const SDL_KeyboardEvent & key) return; } - moveTo(moveDest); + moveTo(moveDest); } void CSlider::moveToMax() @@ -1270,7 +1270,7 @@ void CBoundedLabel::showAll(SDL_Surface * to) CIntObject::showAll(to); const Font &f = *graphics->fonts[font]; - int lineHeight = f.height; + int lineHeight = f.height; int lineCapacity = pos.h / lineHeight; int dy = f.height; //line height @@ -1301,7 +1301,7 @@ void CBoundedLabel::recalculateLines(const std::string &Txt) lines.clear(); const Font &f = *graphics->fonts[font]; - int lineHeight = f.height; + int lineHeight = f.height; lines = CMessage::breakText(Txt, pos.w, font); @@ -1313,13 +1313,13 @@ void CBoundedLabel::recalculateLines(const std::string &Txt) CLabelGroup::CLabelGroup(EFonts Font, EAlignment Align, const SDL_Color &Color): font(Font), align(Align), color(Color) -{}; +{} void CLabelGroup::add(int x, int y, const std::string &text) { OBJ_CONSTRUCTION_CAPTURING_ALL; new CLabel(x, y, font, align, color, text); -}; +} CTextBox::CTextBox(std::string Text, const Rect &rect, int SliderStyle, EFonts Font /*= FONT_SMALL*/, EAlignment Align /*= TOPLEFT*/, const SDL_Color &Color /*= Colors::Cornsilk*/) :CBoundedLabel(rect.x, rect.y, Font, Align, Color, Text), sliderStyle(SliderStyle), slider(NULL) @@ -1340,7 +1340,7 @@ void CTextBox::recalculateLines(const std::string &Txt) vstd::clear_pointer(slider); lines.clear(); const Font &f = *graphics->fonts[font]; - int lineHeight = f.height; + int lineHeight = f.height; int lineCapacity = pos.h / lineHeight; lines = CMessage::breakText(Txt, pos.w, font); @@ -1535,7 +1535,7 @@ void CTextInput::clickLeft( tribool down, bool previousState ) void CTextInput::keyPressed( const SDL_KeyboardEvent & key ) { - if(!focus || key.state != SDL_PRESSED) + if(!focus || key.state != SDL_PRESSED) return; if(key.keysym.sym == SDLK_TAB) diff --git a/client/UIFramework/SDL_Extensions.h b/client/UIFramework/SDL_Extensions.h index f07a750d6..8ea388205 100644 --- a/client/UIFramework/SDL_Extensions.h +++ b/client/UIFramework/SDL_Extensions.h @@ -193,4 +193,4 @@ namespace CSDL_Ext void applyEffect(SDL_Surface * surf, const SDL_Rect * rect, int mode); //mode: 0 - sepia, 1 - grayscale std::string trimToFit(std::string text, int widthLimit, EFonts font); -}; +} diff --git a/lib/CArtHandler.cpp b/lib/CArtHandler.cpp index f260ac6f9..fd9e45307 100644 --- a/lib/CArtHandler.cpp +++ b/lib/CArtHandler.cpp @@ -55,12 +55,12 @@ bool CArtifact::isBig () const // { // if (!vstd::contains(possibleSlots, slotID)) // return false; -// +// // // Can't put an artifact in a locked slot. // std::map::const_iterator it = artifWorn.find(slotID); // if (it != artifWorn.end() && it->second->id == 145) // return false; -// +// // // Check if a combination artifact fits. // // TODO: Might want a more general algorithm? // // Assumes that misc & rings fits only in their slots, and others in only one slot and no duplicates. @@ -71,14 +71,14 @@ bool CArtifact::isBig () const // const ui16 miscSlots[] = {9, 10, 11, 12, 18}; // int rings = 0; // int misc = 0; -// +// // VLC->arth->unequipArtifact(tempArtifWorn, slotID); -// -// BOOST_FOREACH(ui32 constituentID, *constituents) +// +// BOOST_FOREACH(ui32 constituentID, *constituents) // { // const CArtifact& constituent = *VLC->arth->artifacts[constituentID]; // const int slot = constituent.possibleSlots[0]; -// +// // if (slot == 6 || slot == 7) // rings++; // else if ((slot >= 9 && slot <= 12) || slot == 18) @@ -86,18 +86,18 @@ bool CArtifact::isBig () const // else if (tempArtifWorn.find(slot) != tempArtifWorn.end()) // return false; // } -// +// // // Ensure enough ring slots are free -// for (int i = 0; i < sizeof(ringSlots)/sizeof(*ringSlots); i++) +// for (int i = 0; i < sizeof(ringSlots)/sizeof(*ringSlots); i++) // { // if (tempArtifWorn.find(ringSlots[i]) == tempArtifWorn.end() || ringSlots[i] == slotID) // rings--; // } // if (rings > 0) // return false; -// +// // // Ensure enough misc slots are free. -// for (int i = 0; i < sizeof(miscSlots)/sizeof(*miscSlots); i++) +// for (int i = 0; i < sizeof(miscSlots)/sizeof(*miscSlots); i++) // { // if (tempArtifWorn.find(miscSlots[i]) == tempArtifWorn.end() || miscSlots[i] == slotID) // misc--; @@ -105,7 +105,7 @@ bool CArtifact::isBig () const // if (misc > 0) // return false; // } -// +// // return true; // } @@ -113,16 +113,16 @@ bool CArtifact::isBig () const // { // if (constituentOf == NULL || !vstd::contains(*constituentOf, artifactID)) // return false; -// +// // const CArtifact &artifact = *VLC->arth->artifacts[artifactID]; // assert(artifact.constituents); -// -// BOOST_FOREACH(ui32 constituentID, *artifact.constituents) +// +// BOOST_FOREACH(ui32 constituentID, *artifact.constituents) // { // bool found = false; -// for (std::map::const_iterator it = artifWorn.begin(); it != artifWorn.end(); ++it) +// for (std::map::const_iterator it = artifWorn.begin(); it != artifWorn.end(); ++it) // { -// if (it->second->id == constituentID) +// if (it->second->id == constituentID) // { // found = true; // break; @@ -131,7 +131,7 @@ bool CArtifact::isBig () const // if (!found) // return false; // } -// +// // return true; // } @@ -237,7 +237,7 @@ void CArtHandler::loadArtifacts(bool onlyTxt) std::vector slots; slots += 17, 16, 15, 14, 13, 18, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0; growingArtifacts += 146, 147, 148, 150, 151, 152, 153; - static std::map classes = + static std::map classes = map_list_of('S',CArtifact::ART_SPECIAL)('T',CArtifact::ART_TREASURE)('N',CArtifact::ART_MINOR)('J',CArtifact::ART_MAJOR)('R',CArtifact::ART_RELIC); CLegacyConfigParser parser("DATA/ARTRAITS.TXT"); @@ -287,7 +287,7 @@ void CArtHandler::loadArtifacts(bool onlyTxt) // Fill in information about combined artifacts. Should perhaps be moved to a config file? nart.constituentOf = NULL; - switch (nart.id) + switch (nart.id) { case 129: // Angelic Alliance nart.constituents = new std::vector(); @@ -363,7 +363,7 @@ void CArtHandler::loadArtifacts(bool onlyTxt) const JsonNode config(ResourceID("config/commanders.json")); BOOST_FOREACH(const JsonNode &artifact, config["artifacts"].Vector()) { - auto ga = dynamic_cast (artifacts[artifact["id"].Float()].get()); + auto ga = dynamic_cast (artifacts[artifact["id"].Float()].get()); BOOST_FOREACH (auto b, artifact["bonusesPerLevel"].Vector()) { ga->bonusesPerLevel.push_back (std::pair (b["level"].Float(), *ParseBonus (b["bonus"].Vector()))); @@ -382,11 +382,11 @@ void CArtHandler::loadArtifacts(bool onlyTxt) addBonuses(); // Populate reverse mappings of combinational artifacts. - BOOST_FOREACH(CArtifact *artifact, artifacts) + BOOST_FOREACH(CArtifact *artifact, artifacts) { - if (artifact->constituents != NULL) + if (artifact->constituents != NULL) { - BOOST_FOREACH(ui32 constituentID, *artifact->constituents) + BOOST_FOREACH(ui32 constituentID, *artifact->constituents) { if (artifacts[constituentID]->constituentOf == NULL) artifacts[constituentID]->constituentOf = new std::vector(); @@ -484,7 +484,7 @@ ui16 CArtHandler::getArtSync (ui32 rand, int flags) std::vector > out; getAllowed(out, flags); CArtifact *art = out[rand % out.size()]; - return art->id; + return art->id; } void CArtHandler::getAllowed(std::vector > &out, int flags) { @@ -575,7 +575,7 @@ void CArtHandler::makeItCreatureArt (int aid, bool onlyCreature /*=true*/) a->possibleSlots[ArtBearer::COMMANDER].clear(); } a->possibleSlots[ArtBearer::CREATURE].push_back(ArtifactPosition::CREATURE_SLOT); -}; +} void CArtHandler::makeItCommanderArt (int aid, bool onlyCommander /*=true*/) { @@ -587,7 +587,7 @@ void CArtHandler::makeItCommanderArt (int aid, bool onlyCommander /*=true*/) } for (int i = ArtifactPosition::COMMANDER1; i <= ArtifactPosition::COMMANDER6; ++i) a->possibleSlots[ArtBearer::COMMANDER].push_back(i); -}; +} void CArtHandler::addBonuses() { @@ -601,11 +601,11 @@ void CArtHandler::addBonuses() //Propagators/limiters used more than once auto battleWidePropagator = make_shared(CBonusSystemNode::BATTLE); - auto visitedTownPropagator = make_shared(CBonusSystemNode::TOWN_AND_VISITOR); + auto visitedTownPropagator = make_shared(CBonusSystemNode::TOWN_AND_VISITOR); auto shooterOnlyLimiter = make_shared(Bonus::SHOOTER); auto dragonNatureLimiter = make_shared(Bonus::DRAGON_NATURE); - + //Attack bonus artifacts (Weapons) ART_PRIM_SKILL(7,0,+2); //Centaur Axe ART_PRIM_SKILL(8,0,+3); //Blackshard of the Dead Knight @@ -625,7 +625,7 @@ void CArtHandler::addBonuses() ART_PRIM_SKILL(18,0,-3); //Sentinel's Shield //Knowledge bonus artifacts (Helmets) - ART_PRIM_SKILL(19,3,+1); //Helm of the Alabaster Unicorn + ART_PRIM_SKILL(19,3,+1); //Helm of the Alabaster Unicorn ART_PRIM_SKILL(20,3,+2); //Skull Helmet ART_PRIM_SKILL(21,3,+3); //Helm of Chaos ART_PRIM_SKILL(22,3,+4); //Crown of the Supreme Magi @@ -662,13 +662,13 @@ void CArtHandler::addBonuses() ART_POWER_AND_KNOWLEDGE(43,+3); //Necklace of Dragonteeth ART_POWER_AND_KNOWLEDGE(44,+4); //Crown of Dragontooth - //Luck and morale + //Luck and morale ART_MORALE(45,+1); //Still Eye of the Dragon ART_LUCK(45,+1); //Still Eye of the Dragon ART_LUCK(46,+1); //Clover of Fortune ART_LUCK(47,+1); //Cards of Prophecy ART_LUCK(48,+1); //Ladybird of Luck - ART_MORALE(49,+1); //Badge of Courage -> +1 morale + ART_MORALE(49,+1); //Badge of Courage -> +1 morale giveArtBonus(49,Bonus::MIND_IMMUNITY,0); //immunity to hostile mind spells: ART_MORALE(50,+1); //Crest of Valor ART_MORALE(51,+1); //Glyph of Gallantry @@ -772,11 +772,11 @@ void CArtHandler::addBonuses() giveArtBonus(121,Bonus::CREATURE_GROWTH,+2,4, visitedTownPropagator); //Arms of Legion giveArtBonus(122,Bonus::CREATURE_GROWTH,+1,5, visitedTownPropagator); //Head of Legion - //Sea Captain's Hat - giveArtBonus(123,Bonus::WHIRLPOOL_PROTECTION,0); - giveArtBonus(123,Bonus::SEA_MOVEMENT,+500); - giveArtBonus(123,Bonus::SPELL,3,0, Bonus::INDEPENDENT_MAX); - giveArtBonus(123,Bonus::SPELL,3,1, Bonus::INDEPENDENT_MAX); + //Sea Captain's Hat + giveArtBonus(123,Bonus::WHIRLPOOL_PROTECTION,0); + giveArtBonus(123,Bonus::SEA_MOVEMENT,+500); + giveArtBonus(123,Bonus::SPELL,3,0, Bonus::INDEPENDENT_MAX); + giveArtBonus(123,Bonus::SPELL,3,1, Bonus::INDEPENDENT_MAX); giveArtBonus(124, Bonus::SPELLS_OF_LEVEL,3,1); //Spellbinder's Hat giveArtBonus(125, Bonus::BATTLE_NO_FLEEING,0, 0, battleWidePropagator); //Shackles of War @@ -919,32 +919,32 @@ void CArtHandler::clear() // void CArtHandler::equipArtifact( std::map &artifWorn, ui16 slotID, const CArtifact* art ) const // { // unequipArtifact(artifWorn, slotID); -// +// // if (art) //false when artifact is NULL -> slot set to empty // { // const CArtifact &artifact = *art; -// +// // // Add artifact. // artifWorn[slotID] = art; -// +// // // Add locks, in reverse order of being removed. -// if (artifact.constituents != NULL) +// if (artifact.constituents != NULL) // { // bool destConsumed = false; // Determines which constituent that will be counted for together with the artifact. -// -// BOOST_FOREACH(ui32 constituentID, *artifact.constituents) +// +// BOOST_FOREACH(ui32 constituentID, *artifact.constituents) // { // const CArtifact &constituent = *artifacts[constituentID]; -// -// if (!destConsumed && vstd::contains(constituent.possibleSlots, slotID)) +// +// if (!destConsumed && vstd::contains(constituent.possibleSlots, slotID)) // { // destConsumed = true; -// } -// else +// } +// else // { -// BOOST_FOREACH(ui16 slot, constituent.possibleSlots) +// BOOST_FOREACH(ui16 slot, constituent.possibleSlots) // { -// if (!vstd::contains(artifWorn, slot)) +// if (!vstd::contains(artifWorn, slot)) // { // artifWorn[slot] = VLC->arth->artifacts[145]; //lock // break; @@ -955,7 +955,7 @@ void CArtHandler::clear() // } // } // } -// +// // /** // * Locally unequips an artifact from a hero's worn slots. // * Does not test if the operation is legal. @@ -966,30 +966,30 @@ void CArtHandler::clear() // { // if (!vstd::contains(artifWorn, slotID)) // return; -// +// // const CArtifact &artifact = *artifWorn[slotID]; -// +// // // Remove artifact, if it's not already removed. // artifWorn.erase(slotID); -// +// // // Remove locks, in reverse order of being added. -// if (artifact.constituents != NULL) +// if (artifact.constituents != NULL) // { // bool destConsumed = false; -// -// BOOST_FOREACH(ui32 constituentID, *artifact.constituents) +// +// BOOST_FOREACH(ui32 constituentID, *artifact.constituents) // { // const CArtifact &constituent = *artifacts[constituentID]; -// -// if (!destConsumed && vstd::contains(constituent.possibleSlots, slotID)) +// +// if (!destConsumed && vstd::contains(constituent.possibleSlots, slotID)) // { // destConsumed = true; -// } -// else +// } +// else // { -// BOOST_REVERSE_FOREACH(ui16 slot, constituent.possibleSlots) +// BOOST_REVERSE_FOREACH(ui16 slot, constituent.possibleSlots) // { -// if (vstd::contains(artifWorn, slot) && artifWorn[slot]->id == 145) +// if (vstd::contains(artifWorn, slot) && artifWorn[slot]->id == 145) // { // artifWorn.erase(slot); // break; @@ -1152,7 +1152,7 @@ std::vector CArtifactInstance::assemblyPossibilities(const CA || artType->constituents) //combined artifact already: no combining of combined artifacts... for now. return ret; - BOOST_FOREACH(ui32 possibleCombinedArt, *artType->constituentOf) + BOOST_FOREACH(ui32 possibleCombinedArt, *artType->constituentOf) { const CArtifact * const artifact = VLC->arth->artifacts[possibleCombinedArt]; assert(artifact->constituents); @@ -1228,7 +1228,7 @@ bool CArtifactInstance::isPart(const CArtifactInstance *supposedPart) const return supposedPart == this; } -bool CCombinedArtifactInstance::canBePutAt(const CArtifactSet *artSet, int slot, bool assumeDestRemoved /*= false*/) const +bool CCombinedArtifactInstance::canBePutAt(const CArtifactSet *artSet, int slot, bool assumeDestRemoved /*= false*/) const { bool canMainArtifactBePlaced = CArtifactInstance::canBePutAt(artSet, slot, assumeDestRemoved); if(!canMainArtifactBePlaced) @@ -1319,7 +1319,7 @@ void CCombinedArtifactInstance::putAt(ArtifactLocation al) const bool suggestedPosValid = ci.art->canBePutAt(suggestedPos); int pos = -1; - if(inActiveSlot && suggestedPosValid) //there is a valid suggestion where to place lock + if(inActiveSlot && suggestedPosValid) //there is a valid suggestion where to place lock pos = ci.slot; else ci.slot = pos = ci.art->firstAvailableSlot(al.getHolderArtSet()); @@ -1517,7 +1517,7 @@ CArtifactSet::~CArtifactSet() ArtSlotInfo & CArtifactSet::retreiveNewArtSlot(ui16 slot) { assert(!vstd::contains(artifactsWorn, slot)); - ArtSlotInfo &ret = slot < GameConstants::BACKPACK_START + ArtSlotInfo &ret = slot < GameConstants::BACKPACK_START ? artifactsWorn[slot] : *artifactsInBackpack.insert(artifactsInBackpack.begin() + (slot - GameConstants::BACKPACK_START), ArtSlotInfo()); diff --git a/lib/CConsoleHandler.cpp b/lib/CConsoleHandler.cpp index f9e36e3a0..362126ee7 100644 --- a/lib/CConsoleHandler.cpp +++ b/lib/CConsoleHandler.cpp @@ -25,9 +25,10 @@ #else #define WIN32_LEAN_AND_MEAN //excludes rarely used stuff from windows headers - delete this line if something is missing #include +#ifndef __MINGW32__ #include #pragma comment(lib, "dbghelp.lib") - +#endif typedef WORD TColor; HANDLE handleIn; HANDLE handleOut; @@ -108,19 +109,20 @@ LONG WINAPI onUnhandledException(EXCEPTION_POINTERS* exception) if (einfo->ExceptionCode == EXCEPTION_ACCESS_VIOLATION) { - tlog1 << "Attempt to " << (einfo->ExceptionInformation[0] == 1 ? "write to " : "read from ") + tlog1 << "Attempt to " << (einfo->ExceptionInformation[0] == 1 ? "write to " : "read from ") << "0x" << std::setw(8) << (void*)einfo->ExceptionInformation[1] << std::endl;; } const DWORD threadId = ::GetCurrentThreadId(); tlog1 << "Thread ID: " << threadId << " [" << std::dec << std::setw(0) << threadId << "]\n"; +#ifndef __MINGW32__ //exception info to be placed in the dump MINIDUMP_EXCEPTION_INFORMATION meinfo = {threadId, exception, TRUE}; //create file where dump will be placed char *mname = NULL; char buffer[MAX_PATH + 1]; - HMODULE hModule = NULL; + HMODULE hModule = NULL; GetModuleFileNameA(hModule, buffer, MAX_PATH); mname = strrchr(buffer, '\\'); if (mname != 0) @@ -132,6 +134,7 @@ LONG WINAPI onUnhandledException(EXCEPTION_POINTERS* exception) HANDLE dfile = CreateFileA(mname, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0); tlog1 << "Crash info will be put in " << mname << std::endl; MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), dfile, MiniDumpWithDataSegs, &meinfo, 0, 0); +#endif MessageBoxA(0, "VCMI has crashed. We are sorry. File with information about encountered problem has been created.", "VCMI Crashhandler", MB_OK | MB_ICONERROR); return EXCEPTION_EXECUTE_HANDLER; } @@ -233,7 +236,7 @@ CConsoleHandler::~CConsoleHandler() } void CConsoleHandler::end() { - if (thread) + if (thread) { #ifndef _WIN32 thread->interrupt(); diff --git a/lib/CCreatureSet.h b/lib/CCreatureSet.h index 1fedfbbae..6834708b7 100644 --- a/lib/CCreatureSet.h +++ b/lib/CCreatureSet.h @@ -133,7 +133,7 @@ public: class DLL_LINKAGE CCreatureSet : public IArmyDescriptor //seven combined creatures { - CCreatureSet(const CCreatureSet&);; + CCreatureSet(const CCreatureSet&); CCreatureSet &operator=(const CCreatureSet&); public: TSlots stacks; //slots[slot_id]->> pair(creature_id,creature_quantity) @@ -143,7 +143,7 @@ public: virtual ~CCreatureSet(); virtual void armyChanged(); - const CStackInstance &operator[](TSlot slot) const; + const CStackInstance &operator[](TSlot slot) const; const TSlots &Slots() const {return stacks;} @@ -161,13 +161,13 @@ public: void giveStackExp(expType exp); void setStackExp(TSlot slot, expType exp); - //derivative + //derivative void eraseStack(TSlot slot); //slot must be occupied void joinStack(TSlot slot, CStackInstance * stack); //adds new stack to the existing stack of the same type void changeStackCount(TSlot slot, TQuantity toAdd); //stack must exist! bool setCreature (TSlot slot, TCreature type, TQuantity quantity) OVERRIDE; //replaces creature in stack; slots 0 to 6, if quantity=0 erases stack void setToArmy(CSimpleArmy &src); //erases all our army and moves stacks from src to us; src MUST NOT be an armed object! WARNING: use it wisely. Or better do not use at all. - + const CStackInstance& getStack(TSlot slot) const; //stack must exist const CStackInstance* getStackPtr(TSlot slot) const; //if stack doesn't exist, returns NULL const CCreature* getCreature(TSlot slot) const; //workaround of map issue; @@ -186,7 +186,7 @@ public: ui64 getPower (TSlot slot) const; //value of specific stack std::string getRoughAmount (TSlot slot) const; //rough size of specific stack bool hasStackAtSlot(TSlot slot) const; - + bool contains(const CStackInstance *stack) const; bool canBeMergedWith(const CCreatureSet &cs, bool allowMergingStacks = true) const; diff --git a/lib/CObjectHandler.cpp b/lib/CObjectHandler.cpp index 32f3c5d3a..199a293e0 100644 --- a/lib/CObjectHandler.cpp +++ b/lib/CObjectHandler.cpp @@ -53,13 +53,13 @@ std::vector CGTownInstance::merchantArtifacts; std::vector CGTownInstance::universitySkills; void IObjectInterface::onHeroVisit(const CGHeroInstance * h) const -{}; +{} void IObjectInterface::onHeroLeave(const CGHeroInstance * h) const -{}; +{} void IObjectInterface::newTurn () const -{}; +{} IObjectInterface::~IObjectInterface() {} diff --git a/lib/CThreadHelper.cpp b/lib/CThreadHelper.cpp index 8cb63830f..f3b624469 100644 --- a/lib/CThreadHelper.cpp +++ b/lib/CThreadHelper.cpp @@ -35,7 +35,7 @@ void CThreadHelper::processTasks() while(true) { { - boost::unique_lock lock(rtinm); + boost::unique_lock lock(rtinm); if((pom = currentTask) >= amount) break; else @@ -50,6 +50,7 @@ void CThreadHelper::processTasks() void setThreadName(const std::string &name) { #ifdef _WIN32 +#ifndef __GNUC__ //follows http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx const DWORD MS_VC_EXCEPTION=0x406D1388; #pragma pack(push,8) @@ -67,6 +68,7 @@ void setThreadName(const std::string &name) info.dwThreadID = -1; info.dwFlags = 0; + __try { RaiseException( MS_VC_EXCEPTION, 0, sizeof(info)/sizeof(ULONG_PTR), (ULONG_PTR*)&info ); @@ -74,7 +76,11 @@ void setThreadName(const std::string &name) __except(EXCEPTION_EXECUTE_HANDLER) { } +#else +//not supported +#endif + #else prctl(PR_SET_NAME, name.c_str(), 0, 0, 0); #endif -} \ No newline at end of file +} diff --git a/lib/Connection.h b/lib/Connection.h index fe52aa35b..8552d9294 100644 --- a/lib/Connection.h +++ b/lib/Connection.h @@ -5,8 +5,8 @@ #include #include -#include -#include +#include +#include #include #include #include @@ -66,7 +66,7 @@ namespace boost class basic_socket_acceptor; } class mutex; -}; +} enum SerializationLvl { @@ -200,7 +200,7 @@ struct LoadWrong template struct SerializationLevel -{ +{ typedef mpl::integral_c_tag tag; typedef typename mpl::eval_if< @@ -252,7 +252,7 @@ public: TTypeVecMap vectors; //entry must be a pointer to vector containing pointers to the objects of key type bool smartVectorMembersSerialization; - bool sendStackInstanceByIds; + bool sendStackInstanceByIds; CSerializer(); ~CSerializer(); @@ -274,7 +274,7 @@ public: const VectorisedObjectInfo *getVectorisedTypeInfo() { const std::type_info *myType = NULL; -// +// // if(boost::is_base_of::value) //ugly workaround to support also types derived from CGObjectInstance -> if we encounter one, treat it aas CGObj.. // myType = &typeid(CGObjectInstance); // else @@ -342,7 +342,7 @@ public: template //metafunction returning CGObjectInstance if T is its derivate or T elsewise struct VectorisedTypeFor { - typedef typename + typedef typename //if mpl::eval_if, mpl::identity, @@ -471,8 +471,8 @@ public: COSer & operator&(const T & t) { return * this->This() << t; - } - + } + int write(const void * data, unsigned size); @@ -539,7 +539,7 @@ public: //that part of ptr serialization was extracted to allow customization of its behavior in derived classes template void savePointerHlp(ui16 tid, const T &data) - { + { if(!tid) *this << *data; //if type is unregistered simply write all data in a standard way else @@ -556,7 +556,7 @@ public: template void save(const T &data) { - typedef + typedef //if typename mpl::eval_if< mpl::equal_to,mpl::int_ >, mpl::identity >, @@ -703,7 +703,7 @@ public: ~CISer() { std::map::iterator iter; - + for(iter = loaders.begin(); iter != loaders.end(); iter++) delete iter->second; } @@ -725,18 +725,18 @@ public: this->This()->load(t); return * this->This(); } - + template CISer & operator&(T & t) { return * this->This() >> t; - } + } int write(const void * data, unsigned size); template void load(T &data) { - typedef + typedef //if typename mpl::eval_if< mpl::equal_to,mpl::int_ >, mpl::identity >, @@ -782,7 +782,7 @@ public: nonConstT &hlp = const_cast(data); hlp.serialize(*this,fileVersion); //data.serialize(*this,myVersion); - } + } template void loadSerializable(T &data) @@ -806,7 +806,7 @@ public: data = NULL; return; } - + if(smartVectorMembersSerialization) { typedef typename boost::remove_const::type>::type TObjectType; //eg: const CGHeroInstance * => CGHeroInstance @@ -830,7 +830,7 @@ public: return; } - ui32 pid = 0xffffffff; //pointer id (or maybe rather pointee id) + ui32 pid = 0xffffffff; //pointer id (or maybe rather pointee id) if(smartPointerSerialization) { *this >> pid; //get the id @@ -1081,7 +1081,7 @@ template class CApplier { public: - std::map apps; + std::map apps; ~CApplier() { diff --git a/lib/HeroBonus.h b/lib/HeroBonus.h index 4f9394471..1ce19a16b 100644 --- a/lib/HeroBonus.h +++ b/lib/HeroBonus.h @@ -217,7 +217,7 @@ struct DLL_LINKAGE Bonus enum BonusDuration //when bonus is automatically removed { PERMANENT = 1, - ONE_BATTLE = 2, //at the end of battle + ONE_BATTLE = 2, //at the end of battle ONE_DAY = 4, //at the end of day ONE_WEEK = 8, //at the end of week (bonus lasts till the end of week, thats NOT 7 days N_TURNS = 16, //used during battles, after battle bonus is always removed @@ -236,7 +236,7 @@ struct DLL_LINKAGE Bonus enum LimitEffect { - NO_LIMIT = 0, + NO_LIMIT = 0, ONLY_DISTANCE_FIGHT=1, ONLY_MELEE_FIGHT, //used to mark bonuses for attack/defense primary skills from spells like Precision (distance only) ONLY_ENEMY_ARMY }; @@ -265,7 +265,7 @@ struct DLL_LINKAGE Bonus TLimiterPtr limiter; TPropagatorPtr propagator; - std::string description; + std::string description; Bonus(ui16 Dur, ui8 Type, ui8 Src, si32 Val, ui32 ID, std::string Desc, si32 Subtype=-1); Bonus(ui16 Dur, ui8 Type, ui8 Src, si32 Val, ui32 ID, si32 Subtype=-1, ui8 ValType = ADDITIVE_VALUE); @@ -357,7 +357,7 @@ private: public: BonusList(bool BelongsToTree = false); BonusList(const BonusList &bonusList); - BonusList& operator=(const BonusList &bonusList); + BonusList& operator=(const BonusList &bonusList); // wrapper functions of the STL vector container std::vector::size_type size() const { return bonuses.size(); } @@ -393,7 +393,7 @@ public: //void limit(const CBonusSystemNode &node); //erases bonuses using limitor void eliminateDuplicates(); - + // remove_if implementation for STL vector types template void remove_if(Predicate pred) @@ -409,7 +409,7 @@ public: bonuses.resize(newList.size()); std::copy(newList.begin(), newList.end(), bonuses.begin()); } - + template void insert(const int position, InputIterator first, InputIterator last); @@ -465,7 +465,7 @@ public: CPropagatorNodeType(); CPropagatorNodeType(ui8 NodeType); bool shouldBeAttached(CBonusSystemNode *dest); - //CBonusSystemNode *getDestNode(CBonusSystemNode *source, CBonusSystemNode *redParent, CBonusSystemNode *redChild) OVERRIDE; + //CBonusSystemNode *getDestNode(CBonusSystemNode *source, CBonusSystemNode *redParent, CBonusSystemNode *redChild) OVERRIDE; template void serialize(Handler &h, const int version) { @@ -479,7 +479,7 @@ struct BonusLimitationContext const CBonusSystemNode &node; const BonusList &alreadyAccepted; }; - + class DLL_LINKAGE ILimiter { public: @@ -500,7 +500,7 @@ public: // * selector is predicate that tests if HeroBonus matches our criteria // * root is node on which call was made (NULL will be replaced with this) //interface - virtual const TBonusListPtr getAllBonuses(const CSelector &selector, const CSelector &limit, const CBonusSystemNode *root = NULL, const std::string &cachingStr = "") const = 0; + virtual const TBonusListPtr getAllBonuses(const CSelector &selector, const CSelector &limit, const CBonusSystemNode *root = NULL, const std::string &cachingStr = "") const = 0; void getModifiersWDescr(TModDescr &out, const CSelector &selector, const std::string &cachingStr = "") const; //out: pairs int getBonusesCount(const CSelector &selector, const std::string &cachingStr = "") const; int valOfBonuses(const CSelector &selector, const std::string &cachingStr = "") const; @@ -508,7 +508,7 @@ public: const TBonusListPtr getBonuses(const CSelector &selector, const CSelector &limit, const std::string &cachingStr = "") const; const TBonusListPtr getBonuses(const CSelector &selector, const std::string &cachingStr = "") const; - //legacy interface + //legacy interface int valOfBonuses(Bonus::BonusType type, const CSelector &selector) const; int valOfBonuses(Bonus::BonusType type, int subtype = -1) const; //subtype -> subtype of bonus, if -1 then anyt; bool hasBonusOfType(Bonus::BonusType type, int subtype = -1) const;//determines if hero has a bonus of given type (and optionally subtype) @@ -540,16 +540,16 @@ private: TNodesVector parents; //parents -> we inherit bonuses from them, we may attach our bonuses to them TNodesVector children; - + ui8 nodeType; std::string description; - - static const bool cachingEnabled; + + static const bool cachingEnabled; mutable BonusList cachedBonuses; - mutable int cachedLast; + mutable int cachedLast; static int treeChanged; - // Setting a value to cachingStr before getting any bonuses caches the result for later requests. + // Setting a value to cachingStr before getting any bonuses caches the result for later requests. // This string needs to be unique, that's why it has to be setted in the following manner: // [property key]_[value] => only for selector mutable std::map cachedRequests; @@ -562,7 +562,7 @@ public: explicit CBonusSystemNode(); virtual ~CBonusSystemNode(); - + void limitBonuses(const BonusList &allBonuses, BonusList &out) const; //out will bo populed with bonuses that are not limited here TBonusListPtr limitBonuses(const BonusList &allBonuses) const; //same as above, returns out by val for convienence const TBonusListPtr getAllBonuses(const CSelector &selector, const CSelector &limit, const CBonusSystemNode *root = NULL, const std::string &cachingStr = "") const; @@ -573,8 +573,8 @@ public: void getParents(TNodes &out); //retrieves list of parent nodes (nodes to inherit bonuses from) void getRedParents(TNodes &out); //retrieves list of red parent nodes (nodes bonuses propagate from) void getRedAncestors(TNodes &out); - void getRedChildren(TNodes &out); - void getRedDescendants(TNodes &out); + void getRedChildren(TNodes &out); + void getRedDescendants(TNodes &out); Bonus *getBonus(const CSelector &selector); void attachTo(CBonusSystemNode *parent); @@ -604,7 +604,7 @@ public: void deserializationFix(); void exportBonus(Bonus * b); void exportBonuses(); - + static void incrementTreeChangedNum(); BonusList &getBonusList(); const BonusList &getBonusList() const; @@ -628,7 +628,7 @@ public: } enum ENodeTypes { - UNKNOWN, STACK_INSTANCE, STACK_BATTLE, SPECIALITY, ARTIFACT, CREATURE, ARTIFACT_INSTANCE, HERO, PLAYER, TEAM, + UNKNOWN, STACK_INSTANCE, STACK_BATTLE, SPECIALITY, ARTIFACT, CREATURE, ARTIFACT_INSTANCE, HERO, PLAYER, TEAM, TOWN_AND_VISITOR, BATTLE }; }; @@ -641,7 +641,7 @@ namespace NBonus //DLL_LINKAGE const HeroBonus * get(const CBonusSystemNode *obj, int from, int id ); DLL_LINKAGE void getModifiersWDescr(const CBonusSystemNode *obj, TModDescr &out, Bonus::BonusType type, int subtype = -1 ); //out: pairs DLL_LINKAGE int getCount(const CBonusSystemNode *obj, int from, int id); -}; +} /// generates HeroBonus from given data inline Bonus makeFeatureVal(Bonus::BonusType type, ui8 duration, si16 subtype, si32 value, Bonus::BonusSource source, ui16 turnsRemain = 0, si32 additionalInfo = 0) @@ -725,7 +725,7 @@ public: { return turnsRequested <= 0 //every present effect will last zero (or "less") turns || !(bonus->duration & Bonus::N_TURNS) //so do every not expriing after N-turns effect - || bonus->turnsRemain > turnsRequested; + || bonus->turnsRemain > turnsRequested; } CWillLastTurns& operator()(const int &setVal) { @@ -769,7 +769,7 @@ public: } }; -class DLL_LINKAGE CreatureNativeTerrainLimiter : public ILimiter //applies only to creatures that are on their native terrain +class DLL_LINKAGE CreatureNativeTerrainLimiter : public ILimiter //applies only to creatures that are on their native terrain { public: si8 terrainType; diff --git a/lib/NetPacks.h b/lib/NetPacks.h index 2280530d8..d08e20349 100644 --- a/lib/NetPacks.h +++ b/lib/NetPacks.h @@ -48,7 +48,7 @@ struct CPack { tlog1 << "CPack serialized... this should not happen!\n"; } - DLL_LINKAGE void applyGs(CGameState *gs) + void applyGs(CGameState *gs) {}; }; @@ -60,7 +60,7 @@ struct CPackForClient : public CPack void applyFirstCl(CClient *cl)//called before applying to gs {}; void applyCl(CClient *cl)//called after applying to gs - {}; + {}; }; struct CPackForServer : public CPack @@ -70,7 +70,7 @@ struct CPackForServer : public CPack CGameState* GS(CGameHandler *gh); CPackForServer() { - type = 2; + type = 2; c = NULL; player = 255; }; @@ -82,7 +82,7 @@ struct CPackForServer : public CPack struct Query : public CPackForClient { ui32 queryID; // equals to -1 if it is not an actual query (and should not be answered) - + Query() { queryID = -1; @@ -95,7 +95,7 @@ struct MetaString : public CPack //2001 helper for object scrips private: enum EMessage {TEXACT_STRING, TLOCAL_STRING, TNUMBER, TREPLACE_ESTRING, TREPLACE_LSTRING, TREPLACE_NUMBER, TREPLACE_PLUSNUMBER}; public: - enum {GENERAL_TXT=1, XTRAINFO_TXT, OBJ_NAMES, RES_NAMES, ART_NAMES, ARRAY_TXT, CRE_PL_NAMES, CREGENS, MINE_NAMES, + enum {GENERAL_TXT=1, XTRAINFO_TXT, OBJ_NAMES, RES_NAMES, ART_NAMES, ARRAY_TXT, CRE_PL_NAMES, CREGENS, MINE_NAMES, MINE_EVNTS, ADVOB_TXT, ART_EVNTS, SPELL_NAME, SEC_SKILL_NAME, CRE_SING_NAMES, CREGENS4, COLOR, ART_DESCR}; std::vector message; //vector of EMessage @@ -169,7 +169,7 @@ public: { type = 2001; } -}; +}; struct StackLocation { @@ -276,16 +276,16 @@ struct SetResource : public CPackForClient //102 { h & player & resid & val; } -}; +}; struct SetResources : public CPackForClient //104 { SetResources(){type = 104;}; void applyCl(CClient *cl); DLL_LINKAGE void applyGs(CGameState *gs); - + ui8 player; TResources res; //res[resid] => res amount - + template void serialize(Handler &h, const int version) { h & player & res; @@ -307,7 +307,7 @@ struct SetPrimSkill : public CPackForClient //105 { h & abs & id & which & val; } -}; +}; struct SetSecSkill : public CPackForClient //106 { SetSecSkill(){type = 106;}; @@ -344,7 +344,7 @@ struct HeroVisitCastle : public CPackForClient //108 { h & flags & tid & hid; } -}; +}; struct ChangeSpells : public CPackForClient //109 { ChangeSpells(){type = 109;}; @@ -359,7 +359,7 @@ struct ChangeSpells : public CPackForClient //109 { h & learn & hid & spells; } -}; +}; struct SetMana : public CPackForClient //110 { @@ -402,7 +402,7 @@ struct FoWChange : public CPackForClient //112 { h & tiles & player & mode; } -}; +}; struct SetAvailableHeroes : public CPackForClient //113 { @@ -431,7 +431,7 @@ struct GiveBonus : public CPackForClient //115 { GiveBonus(ui8 Who = 0) { - who = Who; + who = Who; type = 115; } @@ -454,7 +454,7 @@ struct ChangeObjPos : public CPackForClient //116 { ChangeObjPos() { - type = 116; + type = 116; flags = 0; } void applyFirstCl(CClient *cl); @@ -495,7 +495,7 @@ struct RemoveBonus : public CPackForClient //118 { RemoveBonus(ui8 Who = 0) { - who = Who; + who = Who; type = 118; } @@ -584,7 +584,7 @@ struct RemoveObject : public CPackForClient //500 { h & id; } -}; +}; struct TryMoveHero : public CPackForClient //501 { TryMoveHero(){type = 501;humanKnows=false; attackedFrom = int3(-1, -1, -1);}; @@ -616,24 +616,24 @@ struct TryMoveHero : public CPackForClient //501 // SetGarrisons(){type = 502;}; // void applyCl(CClient *cl); // DLL_LINKAGE void applyGs(CGameState *gs); -// +// // std::map garrs; -// +// // template void serialize(Handler &h, const int version) // { // h & garrs; // } -// }; +// }; struct NewStructures : public CPackForClient //504 { NewStructures(){type = 504;}; void applyCl(CClient *cl); - DLL_LINKAGE virtual void applyGs(CGameState *gs); + DLL_LINKAGE void applyGs(CGameState *gs); si32 tid; std::set bid; - si16 builded; + si16 builded; template void serialize(Handler &h, const int version) { @@ -648,7 +648,7 @@ struct RazeStructures : public CPackForClient //505 si32 tid; std::set bid; - si16 destroyed; + si16 destroyed; template void serialize(Handler &h, const int version) { @@ -668,7 +668,7 @@ struct SetAvailableCreatures : public CPackForClient //506 { h & tid & creatures; } -}; +}; struct SetHeroesInTown : public CPackForClient //508 { SetHeroesInTown(){type = 508;}; @@ -689,19 +689,19 @@ struct SetHeroesInTown : public CPackForClient //508 // void applyCl(CClient *cl); // DLL_LINKAGE void applyGs(CGameState *gs); // DLL_LINKAGE void setArtAtPos(ui16 pos, const CArtifact* art); -// +// // si32 hid; // std::vector artifacts; //hero's artifacts from bag // std::map artifWorn; //map; positions: 0 - head; 1 - shoulders; 2 - neck; 3 - right hand; 4 - left hand; 5 - torso; 6 - right ring; 7 - left ring; 8 - feet; 9 - misc1; 10 - misc2; 11 - misc3; 12 - misc4; 13 - mach1; 14 - mach2; 15 - mach3; 16 - mach4; 17 - spellbook; 18 - misc5 -// +// // template void serialize(Handler &h, const int version) // { // h & hid & artifacts & artifWorn; // } -// +// // std::vector equipped, unequipped; //used locally // BonusList gained, lost; //used locally as hlp when applying -// }; +// }; struct HeroRecruited : public CPackForClient //515 { @@ -717,7 +717,7 @@ struct HeroRecruited : public CPackForClient //515 { h & hid & tid & tile & player; } -}; +}; struct GiveHero : public CPackForClient //516 { @@ -733,7 +733,7 @@ struct GiveHero : public CPackForClient //516 { h & id & player; } -}; +}; struct OpenWindow : public CPackForClient //517 { @@ -1072,7 +1072,7 @@ struct NewTurn : public CPackForClient //101 { h & heroes & cres & res & day & resetBuilded & specialWeek & creatureid; } -}; +}; struct Component : public CPack //2002 helper for object scrips informations { @@ -1110,10 +1110,10 @@ struct InfoWindow : public CPackForClient //103 - displays simple info window { h & text & components & player & soundID; } - InfoWindow() - { + InfoWindow() + { type = 103; - soundID = 0; + soundID = 0; } }; @@ -1134,7 +1134,7 @@ struct SetObjectProperty : public CPackForClient//1001 ui32 val; SetObjectProperty(){type = 1001;}; SetObjectProperty(ui32 ID, ui8 What, ui32 Val):id(ID),what(What),val(Val){type = 1001;}; - + template void serialize(Handler &h, const int version) { h & id & what & val; @@ -1149,7 +1149,7 @@ struct SetHoverName : public CPackForClient//1002 MetaString name; SetHoverName(){type = 1002;}; SetHoverName(ui32 ID, MetaString& Name):id(ID),name(Name){type = 1002;}; - + template void serialize(Handler &h, const int version) { h & id & name; @@ -1165,7 +1165,7 @@ struct HeroLevelUp : public Query//2000 std::vector skills; HeroLevelUp(){type = 2000;}; - + template void serialize(Handler &h, const int version) { h & queryID & heroid & primskill & level & skills; @@ -1273,14 +1273,14 @@ struct BattleStart : public CPackForClient//3000 BattleInfo * info; - + template void serialize(Handler &h, const int version) { h & info; } }; struct BattleNextRound : public CPackForClient//3001 -{ +{ BattleNextRound(){type = 3001;}; void applyFirstCl(CClient *cl); void applyCl(CClient *cl); @@ -1874,7 +1874,7 @@ struct GarrisonHeroSwap : public CPackForServer { GarrisonHeroSwap(){}; GarrisonHeroSwap(si32 TID):tid(TID){}; - si32 tid; + si32 tid; bool applyGh(CGameHandler *gh); template void serialize(Handler &h, const int version) @@ -1971,7 +1971,7 @@ struct HireHero : public CPackForServer } }; -struct BuildBoat : public CPackForServer +struct BuildBoat : public CPackForServer { BuildBoat(){}; si32 objid; //where player wants to buy a boat @@ -2084,7 +2084,7 @@ struct PlayerMessage : public CPackForClient, public CPackForServer //513 { h & text & player; } -}; +}; struct SetSelection : public CPackForClient, public CPackForServer //514 @@ -2241,7 +2241,7 @@ struct RequestOptionsChange : public CPregamePackToHost { enum {TOWN, HERO, BONUS}; ui8 what; - si8 direction; //-1 or +1 + si8 direction; //-1 or +1 ui8 playerID; RequestOptionsChange(ui8 What, si8 Dir, ui8 Player) diff --git a/lib/ResourceSet.h b/lib/ResourceSet.h index 17a819886..525bf4815 100644 --- a/lib/ResourceSet.h +++ b/lib/ResourceSet.h @@ -10,7 +10,7 @@ namespace Res class ResourceSet; bool canAfford(const ResourceSet &res, const ResourceSet &price); //can a be used to pay price b - enum ERes + enum ERes { WOOD = 0, MERCURY, ORE, SULFUR, CRYSTAL, GEMS, GOLD, MITHRIL }; @@ -25,7 +25,7 @@ namespace Res #define scalarOperator(OPSIGN) \ - DLL_LINKAGE ResourceSet operator OPSIGN(const TResource &rhs) const \ + ResourceSet operator OPSIGN(const TResource &rhs) const \ { \ ResourceSet ret = *this; \ for(int i = 0; i < size(); i++) \ @@ -37,7 +37,7 @@ namespace Res #define vectorOperator(OPSIGN) \ - DLL_LINKAGE ResourceSet operator OPSIGN(const ResourceSet &rhs) const \ + ResourceSet operator OPSIGN(const ResourceSet &rhs) const \ { \ ResourceSet ret = *this; \ for(int i = 0; i < size(); i++) \ @@ -48,7 +48,7 @@ namespace Res #define opEqOperator(OPSIGN, RHS_TYPE) \ - DLL_LINKAGE ResourceSet& operator OPSIGN ## =(const RHS_TYPE &rhs) \ + ResourceSet& operator OPSIGN ## =(const RHS_TYPE &rhs) \ { \ return *this = *this OPSIGN rhs; \ } @@ -70,7 +70,7 @@ namespace Res #undef opEqOperator //to be used for calculations of type "how many units of sth can I afford?" - DLL_LINKAGE int operator/(const ResourceSet &rhs) + int operator/(const ResourceSet &rhs) { int ret = INT_MAX; for(int i = 0; i < size(); i++) @@ -80,7 +80,7 @@ namespace Res return ret; } - DLL_LINKAGE ResourceSet & operator=(const TResource &rhs) + ResourceSet & operator=(const TResource &rhs) { for(int i = 0; i < size(); i++) at(i) = rhs; @@ -88,14 +88,14 @@ namespace Res return *this; } - // WARNING: comparison operators are used for "can afford" relation: a <= b means that foreach i a[i] <= b[i] + // WARNING: comparison operators are used for "can afford" relation: a <= b means that foreach i a[i] <= b[i] // that doesn't work the other way: a > b doesn't mean that a cannot be afforded with b, it's still b can afford a // bool operator<(const ResourceSet &rhs) // { // for(int i = 0; i < size(); i++) // if(at(i) >= rhs[i]) // return false; -// +// // return true; // } @@ -118,7 +118,7 @@ namespace Res } cur; const ResourceSet &rs; void advance(); - + public: nziterator(const ResourceSet &RS); bool valid(); @@ -126,7 +126,7 @@ namespace Res nziterator operator++(int); const ResEntry& operator*() const; const ResEntry* operator->() const; - + }; }; }