summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/flooritem.cpp15
-rw-r--r--src/net/ea/itemhandler.cpp4
-rw-r--r--src/resources/itemdb.cpp4
-rw-r--r--src/resources/iteminfo.h7
4 files changed, 24 insertions, 6 deletions
diff --git a/src/flooritem.cpp b/src/flooritem.cpp
index 0bb75fb1f..a6d45f788 100644
--- a/src/flooritem.cpp
+++ b/src/flooritem.cpp
@@ -53,10 +53,20 @@ FloorItem::FloorItem(int id, int itemId, int x, int y, Map *map, int amount,
mHighlight(config.getBoolValue("floorItemsHighlight"))
{
setMap(map);
+ const ItemInfo &info = ItemDB::get(itemId);
if (map)
{
- mPos.x = static_cast<float>(x * map->getTileWidth() + subX);
- mPos.y = static_cast<float>(y * map->getTileHeight() + subY);
+ int max = info.getMaxFloorOffset();
+ if (subX > max)
+ subX = max;
+ else if (subX < -max)
+ subX = -max;
+ if (subY > max)
+ subY = max;
+ else if (subY < -max)
+ subY = -max;
+ mPos.x = static_cast<float>(x * map->getTileWidth() + subX + 16 - 8);
+ mPos.y = static_cast<float>(y * map->getTileHeight() + subY + 32 - 8);
}
else
{
@@ -64,7 +74,6 @@ FloorItem::FloorItem(int id, int itemId, int x, int y, Map *map, int amount,
mPos.y = 0;
}
- const ItemInfo &info = ItemDB::get(itemId);
setupSpriteDisplay(info.getDisplay(), true, 1,
info.getDyeColorsString(mColor));
mYDiff = 31;
diff --git a/src/net/ea/itemhandler.cpp b/src/net/ea/itemhandler.cpp
index 7a6ee2743..2d2566409 100644
--- a/src/net/ea/itemhandler.cpp
+++ b/src/net/ea/itemhandler.cpp
@@ -43,8 +43,8 @@ void ItemHandler::processItemVisible(Net::MessageIn &msg)
int x = msg.readInt16();
int y = msg.readInt16();
int amount = msg.readInt16();
- int subX = msg.readInt8() + 16 - 8;
- int subY = msg.readInt8() + 32 - 8;
+ int subX = msg.readInt8();
+ int subY = msg.readInt8();
if (actorSpriteManager)
{
diff --git a/src/resources/itemdb.cpp b/src/resources/itemdb.cpp
index cf05a28f0..38aa6d958 100644
--- a/src/resources/itemdb.cpp
+++ b/src/resources/itemdb.cpp
@@ -210,7 +210,8 @@ void ItemDB::load()
std::string attackAction = XML::getProperty(node, "attack-action", "");
std::string drawBefore = XML::getProperty(node, "drawBefore", "");
std::string drawAfter = XML::getProperty(node, "drawAfter", "");
-// std::string removeSprite = XML::getProperty(node, "removeSprite", "");
+ int maxFloorOffset = XML::getIntProperty(
+ node, "maxFloorOffset", 32, 0, 32);
std::string colors;
if (serverVersion >= 1)
{
@@ -307,6 +308,7 @@ void ItemDB::load()
itemInfo->setDrawAfter(-1, parseSpriteName(drawAfter));
itemInfo->setDrawPriority(-1, drawPriority);
itemInfo->setColorsList(colors);
+ itemInfo->setMaxFloorOffset(maxFloorOffset);
std::string effect;
for (size_t i = 0; i < sizeof(fields) / sizeof(fields[0]); ++ i)
diff --git a/src/resources/iteminfo.h b/src/resources/iteminfo.h
index 33727b136..1816b3bf5 100644
--- a/src/resources/iteminfo.h
+++ b/src/resources/iteminfo.h
@@ -233,6 +233,12 @@ class ItemInfo
bool isRemoveSprites() const
{ return mIsRemoveSprites; }
+ void setMaxFloorOffset(int i)
+ { maxFloorOffset = i; }
+
+ int getMaxFloorOffset() const
+ { return maxFloorOffset; }
+
bool isRemoveItemId(int id) const;
/** Effects to be shown when weapon attacks - see also effects.xml */
@@ -297,6 +303,7 @@ class ItemInfo
std::string mColorList;
int mHitEffectId;
int mCriticalHitEffectId;
+ int maxFloorOffset;
};
#endif