diff options
author | rubidium <rubidium@openttd.org> | 2008-04-19 08:21:55 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2008-04-19 08:21:55 +0000 |
commit | 49cfba55bbaa018d199402547968dcaabea82b29 (patch) | |
tree | dfdce4df425e98d4331f3984284904c541a8d2a1 /src/oldloader.cpp | |
parent | 15242b17844cff61e870933b7759d729516a33ea (diff) | |
download | openttd-49cfba55bbaa018d199402547968dcaabea82b29.tar.xz |
(svn r12782) -Codechange: remove some functions from functions.h and do not statically 'waste' memory when the old name array is not needed anymore.
Diffstat (limited to 'src/oldloader.cpp')
-rw-r--r-- | src/oldloader.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/oldloader.cpp b/src/oldloader.cpp index 3f2ee4c35..5672f228f 100644 --- a/src/oldloader.cpp +++ b/src/oldloader.cpp @@ -24,6 +24,7 @@ #include "date_func.h" #include "vehicle_func.h" #include "variables.h" +#include "strings_func.h" #include "table/strings.h" @@ -84,6 +85,12 @@ enum OldChunkType { OC_TILE = OC_VAR_U32 | OC_FILE_U16, + /** + * Dereference the pointer once before writing to it, + * so we do not have to use big static arrays. + */ + OC_DEREFERENCE_POINTER = 1 << 31, + OC_END = 0 ///< End of the whole chunk, all 32bits set to zero }; @@ -201,10 +208,10 @@ static bool LoadChunk(LoadgameState *ls, void *base, const OldChunks *chunks) byte *base_ptr = (byte*)base; while (chunk->type != OC_END) { - byte* ptr = (byte*)chunk->ptr; - uint i; + byte *ptr = (byte*)chunk->ptr; + if ((chunk->type & OC_DEREFERENCE_POINTER) != 0) ptr = *(byte**)ptr; - for (i = 0; i < chunk->amount; i++) { + for (uint i = 0; i < chunk->amount; i++) { if (ls->failed) return false; /* Handle simple types */ @@ -391,7 +398,7 @@ static void FixOldVehicles() extern TileIndex *_animated_tile_list; extern uint _animated_tile_count; -extern char _name_array[512][32]; +extern char *_old_name_array; static byte _old_vehicle_multiplier; static uint8 _old_map3[OLD_MAP_SIZE * 2]; @@ -1521,7 +1528,7 @@ static const OldChunks main_chunk[] = { OCL_ASSERT( 0x6F0F2 ), - OCL_VAR ( OC_UINT8, 32 * 500, &_name_array[0] ), + OCL_VAR ( OC_UINT8 | OC_DEREFERENCE_POINTER, 32 * 500, &_old_name_array ), OCL_NULL( 0x2000 ), ///< Old hash-table, no longer in use |