mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r25844) -Change: Increase maximum number of object instances on the map from 64k to about 16M.
This commit is contained in:
parent
29f5eab56c
commit
69a0c91d63
|
@ -1593,13 +1593,14 @@
|
|||
<td valign=top nowrap> </td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>m1 bits 6..5 : Water class (sea, canal, river or land)
|
||||
<li>m1 bits 6..5 : Water class (sea, canal, river or land)</li>
|
||||
<li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> of the object (for lighthouses and transmitters normally <tt>10</tt>)</li>
|
||||
<li>m2: index into the array of objects
|
||||
<li>m3: random bits
|
||||
<li>m2: index into the array of objects, bits 0 to 15 (upper bits in m5)</li>
|
||||
<li>m3: random bits</li>
|
||||
<li>m5: index into the array of objects, bits 16 to 23 (lower bits in m2)</li>
|
||||
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
|
||||
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
|
||||
<li>m7: animation counter
|
||||
<li>m7: animation counter</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -332,7 +332,7 @@ the array so you can quickly see what is used and what is not.
|
|||
<td class="bits">XXXX XXXX XXXX XXXX</td>
|
||||
<td class="bits">XXXX XXXX</td>
|
||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||
<td class="bits"><span class="free">OOOO OOOO</span></td>
|
||||
<td class="bits">XXXX XXXX</td>
|
||||
<td class="bits">XX<span class="free">OO OO</span>XX</td>
|
||||
<td class="bits">XXXX XXXX</td>
|
||||
</tr>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include "town_type.h"
|
||||
#include "date_type.h"
|
||||
|
||||
typedef Pool<Object, ObjectID, 64, 64000> ObjectPool;
|
||||
typedef Pool<Object, ObjectID, 64, 0xFF0000> ObjectPool;
|
||||
extern ObjectPool _object_pool;
|
||||
|
||||
/** An object, such as transmitter, on the map. */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue