From 69a0c91d63df017f99137c4d70d69fa32d3822f9 Mon Sep 17 00:00:00 2001 From: frosch Date: Sat, 12 Oct 2013 16:35:50 +0000 Subject: (svn r25844) -Change: Increase maximum number of object instances on the map from 64k to about 16M. --- docs/landscape.html | 9 +++++---- docs/landscape_grid.html | 2 +- src/object_base.h | 2 +- src/object_map.h | 4 ++-- src/object_type.h | 4 ++-- src/saveload/afterload.cpp | 4 ++-- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/docs/landscape.html b/docs/landscape.html index 0a38b90e4..abf01c9d8 100644 --- a/docs/landscape.html +++ b/docs/landscape.html @@ -1593,13 +1593,14 @@   diff --git a/docs/landscape_grid.html b/docs/landscape_grid.html index b7603c72d..e2f3c1f97 100644 --- a/docs/landscape_grid.html +++ b/docs/landscape_grid.html @@ -332,7 +332,7 @@ the array so you can quickly see what is used and what is not. XXXX XXXX XXXX XXXX XXXX XXXX OOOO OOOO - OOOO OOOO + XXXX XXXX XXOO OOXX XXXX XXXX diff --git a/src/object_base.h b/src/object_base.h index 676fc9c9c..47e5a7f94 100644 --- a/src/object_base.h +++ b/src/object_base.h @@ -18,7 +18,7 @@ #include "town_type.h" #include "date_type.h" -typedef Pool ObjectPool; +typedef Pool ObjectPool; extern ObjectPool _object_pool; /** An object, such as transmitter, on the map. */ diff --git a/src/object_map.h b/src/object_map.h index 3c185b14b..85faf4444 100644 --- a/src/object_map.h +++ b/src/object_map.h @@ -49,7 +49,7 @@ static inline bool IsObjectTypeTile(TileIndex t, ObjectType type) static inline ObjectID GetObjectIndex(TileIndex t) { assert(IsTileType(t, MP_OBJECT)); - return _m[t].m2; + return _m[t].m2 | _m[t].m5 << 16; } /** @@ -81,7 +81,7 @@ static inline void MakeObject(TileIndex t, Owner o, ObjectID index, WaterClass w _m[t].m2 = index; _m[t].m3 = random; _m[t].m4 = 0; - _m[t].m5 = 0; + _m[t].m5 = index >> 16; SB(_m[t].m6, 2, 4, 0); _me[t].m7 = 0; } diff --git a/src/object_type.h b/src/object_type.h index 1ebb24d53..4ead576f3 100644 --- a/src/object_type.h +++ b/src/object_type.h @@ -28,11 +28,11 @@ static const ObjectType NUM_OBJECTS = 64000; ///< Number of supported o static const ObjectType INVALID_OBJECT_TYPE = 0xFFFF; ///< An invalid object /** Unique identifier for an object. */ -typedef uint16 ObjectID; +typedef uint32 ObjectID; struct Object; struct ObjectSpec; -static const ObjectID INVALID_OBJECT = 0xFFFF; ///< An invalid object +static const ObjectID INVALID_OBJECT = 0xFFFFFFFF; ///< An invalid object #endif /* OBJECT_TYPE_H */ diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 5f56b0a08..96b568b82 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2819,9 +2819,9 @@ bool AfterLoadGame() /* Move ObjectType from map to pool */ for (TileIndex t = 0; t < map_size; t++) { if (IsTileType(t, MP_OBJECT)) { - Object *o = Object::GetByTile(t); + Object *o = Object::Get(_m[t].m2); o->type = _m[t].m5; - _m[t].m5 = 0; // cleanup for next usage + _m[t].m5 = 0; // zero upper bits of (now bigger) ObjectID } } } -- cgit v1.2.3-70-g09d2