author | peter1138 |
Sun, 03 Aug 2008 17:35:08 +0000 | |
changeset 9834 | 7474149531c1 |
parent 9470 | 08424e2e79e4 |
child 9989 | 62e68bd41c90 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
9111
48ce04029fe4
(svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents:
8432
diff
changeset
|
3 |
/** @file gfxinit.cpp Initializing of the (GRF) graphics. */ |
6179
d19b0137d8e4
(svn r8950) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6103
diff
changeset
|
4 |
|
0 | 5 |
#include "stdafx.h" |
1891
862800791170
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1844
diff
changeset
|
6 |
#include "openttd.h" |
1299
39c06aba09aa
(svn r1803) Move debugging stuff into files of it's own
tron
parents:
1250
diff
changeset
|
7 |
#include "debug.h" |
2340
e18ef06bc59a
(svn r2866) Move all functions and tables which aren't directly involved in managing the sprite heap to a new file gfxinit.c.
tron
parents:
2339
diff
changeset
|
8 |
#include "gfxinit.h" |
1349
15979a2e9001
(svn r1853) Move spritecache function declarations into a header of their own and use SpriteID as parameter type where appropriate
tron
parents:
1348
diff
changeset
|
9 |
#include "spritecache.h" |
0 | 10 |
#include "fileio.h" |
7805
7ab20f94cc80
(svn r11355) -Fix [FS#1377]: loading too many GRFs was not handled gracefully causing crashes and such.
rubidium
parents:
7800
diff
changeset
|
11 |
#include "fios.h" |
463
97ec66c280f2
(svn r687) Export InitNewGRFFile() and DecodeSpecialSprite() properly.
pasky
parents:
452
diff
changeset
|
12 |
#include "newgrf.h" |
961 | 13 |
#include "md5.h" |
2159
f6284cf5fab0
(svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents:
2142
diff
changeset
|
14 |
#include "variables.h" |
5156
771ed0d9f836
(svn r7254) -Fix (r7250): move unicode glyph map initialisation to just before newgrf files are loaded, else newgrf glyphs will be cleared out too. (thanks Hadez)
peter1138
parents:
5151
diff
changeset
|
15 |
#include "fontcache.h" |
8123
ce31d2843a95
(svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium
parents:
8121
diff
changeset
|
16 |
#include "gfx_func.h" |
8213
7bdd7593eb9b
(svn r11776) -Codechange: more header splittings to reduce the dependencies.
rubidium
parents:
8133
diff
changeset
|
17 |
#include "core/alloc_func.hpp" |
8236
8a5dd0b42e47
(svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents:
8214
diff
changeset
|
18 |
#include "core/bitmath_func.hpp" |
4472
93758d1da52d
(svn r6257) Use memcmp() to check the MD5 sum instead of using a home brewed loop
tron
parents:
4209
diff
changeset
|
19 |
#include <string.h> |
8270
e7c342f6b14c
(svn r11834) -Codechange: only include settings_type.h if needed.
rubidium
parents:
8264
diff
changeset
|
20 |
#include "settings_type.h" |
0 | 21 |
|
8264
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8236
diff
changeset
|
22 |
#include "table/sprites.h" |
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8236
diff
changeset
|
23 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
24 |
struct MD5File { |
6179
d19b0137d8e4
(svn r8950) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6103
diff
changeset
|
25 |
const char * filename; ///< filename |
8133
3ab8eaf85ca0
(svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents:
8131
diff
changeset
|
26 |
uint8 hash[16]; ///< md5 sum of the file |
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
27 |
}; |
961 | 28 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
29 |
struct FileList { |
7882
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
30 |
MD5File basic[2]; ///< GRF files that always have to be loaded |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
31 |
MD5File landscape[3]; ///< Landscape specific grf files |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
32 |
MD5File sound; ///< Sound samples |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
33 |
MD5File openttd; ///< GRF File with OTTD specific graphics |
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
34 |
}; |
0 | 35 |
|
961 | 36 |
#include "table/files.h" |
0 | 37 |
#include "table/landscape_sprite.h" |
38 |
||
2187
a0e206ce9fbf
(svn r2702) -Codechange: Cleaned up the sprite code and replaced many magic numbers
celestar
parents:
2186
diff
changeset
|
39 |
static const SpriteID * const _landscape_spriteindexes[] = { |
0 | 40 |
_landscape_spriteindexes_1, |
41 |
_landscape_spriteindexes_2, |
|
42 |
_landscape_spriteindexes_3, |
|
43 |
}; |
|
44 |
||
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
45 |
static uint LoadGrfFile(const char *filename, uint load_index, int file_index) |
0 | 46 |
{ |
2342
aae24c9661ba
(svn r2868) Change the way NewGRFs are loaded: The loading process i no longer bolted onto the normal graphics loading.
tron
parents:
2340
diff
changeset
|
47 |
uint load_index_org = load_index; |
6908
6b1324d7a2c9
(svn r10157) -Fix: use as indentified for PNGs, the place of the image as it was in the grf, not the internal SpriteID
truelight
parents:
6780
diff
changeset
|
48 |
uint sprite_id = 0; |
0 | 49 |
|
50 |
FioOpenFile(file_index, filename); |
|
365
957b98a0e1e8
(svn r553) -newgrf: Special routine for loading newgrf files. LoadNewGrfFile() introduced; will get more handy when loading stages will be introduced (octo and pasky).
darkvater
parents:
364
diff
changeset
|
51 |
|
5380
8ea58542b6e0
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
5296
diff
changeset
|
52 |
DEBUG(sprite, 2, "Reading grf-file '%s'", filename); |
0 | 53 |
|
6908
6b1324d7a2c9
(svn r10157) -Fix: use as indentified for PNGs, the place of the image as it was in the grf, not the internal SpriteID
truelight
parents:
6780
diff
changeset
|
54 |
while (LoadNextSprite(load_index, file_index, sprite_id)) { |
0 | 55 |
load_index++; |
6908
6b1324d7a2c9
(svn r10157) -Fix: use as indentified for PNGs, the place of the image as it was in the grf, not the internal SpriteID
truelight
parents:
6780
diff
changeset
|
56 |
sprite_id++; |
2187
a0e206ce9fbf
(svn r2702) -Codechange: Cleaned up the sprite code and replaced many magic numbers
celestar
parents:
2186
diff
changeset
|
57 |
if (load_index >= MAX_SPRITES) { |
9470
08424e2e79e4
(svn r13390) -Codechange: introduce usererror() for fatal but not openttd related errors. Now all error() will 'crash' openttd after showing the message in win32 releases (MSVC), creating a crash.log and crash.dmp (like the '!' hack used before). On the other hand, usererror() will just close the game. So use error() only when it can be helpful to debugging, else use usererror().
glx
parents:
9436
diff
changeset
|
58 |
usererror("Too many sprites. Recompile with higher MAX_SPRITES value or remove some custom GRF files."); |
0 | 59 |
} |
60 |
} |
|
5380
8ea58542b6e0
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
5296
diff
changeset
|
61 |
DEBUG(sprite, 2, "Currently %i sprites are loaded", load_index); |
0 | 62 |
|
365
957b98a0e1e8
(svn r553) -newgrf: Special routine for loading newgrf files. LoadNewGrfFile() introduced; will get more handy when loading stages will be introduced (octo and pasky).
darkvater
parents:
364
diff
changeset
|
63 |
return load_index - load_index_org; |
957b98a0e1e8
(svn r553) -newgrf: Special routine for loading newgrf files. LoadNewGrfFile() introduced; will get more handy when loading stages will be introduced (octo and pasky).
darkvater
parents:
364
diff
changeset
|
64 |
} |
957b98a0e1e8
(svn r553) -newgrf: Special routine for loading newgrf files. LoadNewGrfFile() introduced; will get more handy when loading stages will be introduced (octo and pasky).
darkvater
parents:
364
diff
changeset
|
65 |
|
2342
aae24c9661ba
(svn r2868) Change the way NewGRFs are loaded: The loading process i no longer bolted onto the normal graphics loading.
tron
parents:
2340
diff
changeset
|
66 |
|
7772
c89384e3f8de
(svn r11321) -Codechange: add support to load different graphics for halftile slopes using a NewGRF. Patch by frosch.
rubidium
parents:
7767
diff
changeset
|
67 |
void LoadSpritesIndexed(int file_index, uint *sprite_id, const SpriteID *index_tbl) |
c89384e3f8de
(svn r11321) -Codechange: add support to load different graphics for halftile slopes using a NewGRF. Patch by frosch.
rubidium
parents:
7767
diff
changeset
|
68 |
{ |
c89384e3f8de
(svn r11321) -Codechange: add support to load different graphics for halftile slopes using a NewGRF. Patch by frosch.
rubidium
parents:
7767
diff
changeset
|
69 |
uint start; |
c89384e3f8de
(svn r11321) -Codechange: add support to load different graphics for halftile slopes using a NewGRF. Patch by frosch.
rubidium
parents:
7767
diff
changeset
|
70 |
while ((start = *index_tbl++) != END) { |
c89384e3f8de
(svn r11321) -Codechange: add support to load different graphics for halftile slopes using a NewGRF. Patch by frosch.
rubidium
parents:
7767
diff
changeset
|
71 |
uint end = *index_tbl++; |
c89384e3f8de
(svn r11321) -Codechange: add support to load different graphics for halftile slopes using a NewGRF. Patch by frosch.
rubidium
parents:
7767
diff
changeset
|
72 |
|
8432
19e2849a638c
(svn r12002) -Cleanup (r11981): Remove obsolete code to skip sprites from indexed GRFs.
peter1138
parents:
8411
diff
changeset
|
73 |
do { |
19e2849a638c
(svn r12002) -Cleanup (r11981): Remove obsolete code to skip sprites from indexed GRFs.
peter1138
parents:
8411
diff
changeset
|
74 |
bool b = LoadNextSprite(start, file_index, *sprite_id); |
19e2849a638c
(svn r12002) -Cleanup (r11981): Remove obsolete code to skip sprites from indexed GRFs.
peter1138
parents:
8411
diff
changeset
|
75 |
assert(b); |
19e2849a638c
(svn r12002) -Cleanup (r11981): Remove obsolete code to skip sprites from indexed GRFs.
peter1138
parents:
8411
diff
changeset
|
76 |
(*sprite_id)++; |
19e2849a638c
(svn r12002) -Cleanup (r11981): Remove obsolete code to skip sprites from indexed GRFs.
peter1138
parents:
8411
diff
changeset
|
77 |
} while (++start <= end); |
7772
c89384e3f8de
(svn r11321) -Codechange: add support to load different graphics for halftile slopes using a NewGRF. Patch by frosch.
rubidium
parents:
7767
diff
changeset
|
78 |
} |
c89384e3f8de
(svn r11321) -Codechange: add support to load different graphics for halftile slopes using a NewGRF. Patch by frosch.
rubidium
parents:
7767
diff
changeset
|
79 |
} |
c89384e3f8de
(svn r11321) -Codechange: add support to load different graphics for halftile slopes using a NewGRF. Patch by frosch.
rubidium
parents:
7767
diff
changeset
|
80 |
|
2342
aae24c9661ba
(svn r2868) Change the way NewGRFs are loaded: The loading process i no longer bolted onto the normal graphics loading.
tron
parents:
2340
diff
changeset
|
81 |
static void LoadGrfIndexed(const char* filename, const SpriteID* index_tbl, int file_index) |
365
957b98a0e1e8
(svn r553) -newgrf: Special routine for loading newgrf files. LoadNewGrfFile() introduced; will get more handy when loading stages will be introduced (octo and pasky).
darkvater
parents:
364
diff
changeset
|
82 |
{ |
6908
6b1324d7a2c9
(svn r10157) -Fix: use as indentified for PNGs, the place of the image as it was in the grf, not the internal SpriteID
truelight
parents:
6780
diff
changeset
|
83 |
uint sprite_id = 0; |
614
b96f987dbf80
(svn r1038) Feature: OpenTTD runs with the grf files of the DOS version
dominik
parents:
579
diff
changeset
|
84 |
|
365
957b98a0e1e8
(svn r553) -newgrf: Special routine for loading newgrf files. LoadNewGrfFile() introduced; will get more handy when loading stages will be introduced (octo and pasky).
darkvater
parents:
364
diff
changeset
|
85 |
FioOpenFile(file_index, filename); |
957b98a0e1e8
(svn r553) -newgrf: Special routine for loading newgrf files. LoadNewGrfFile() introduced; will get more handy when loading stages will be introduced (octo and pasky).
darkvater
parents:
364
diff
changeset
|
86 |
|
5380
8ea58542b6e0
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
5296
diff
changeset
|
87 |
DEBUG(sprite, 2, "Reading indexed grf-file '%s'", filename); |
0 | 88 |
|
7772
c89384e3f8de
(svn r11321) -Codechange: add support to load different graphics for halftile slopes using a NewGRF. Patch by frosch.
rubidium
parents:
7767
diff
changeset
|
89 |
LoadSpritesIndexed(file_index, &sprite_id, index_tbl); |
184
dbeaaaf8b2bb
(svn r185) -Fix: [1016954] Cached_sprites does now work again
truelight
parents:
182
diff
changeset
|
90 |
} |
0 | 91 |
|
92 |
||
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
93 |
/** |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
94 |
* Calculate and check the MD5 hash of the supplied filename. |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
95 |
* @param file filename and expected MD5 hash for the given filename. |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
96 |
* @return true if the checksum is correct. |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
97 |
*/ |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
98 |
static bool FileMD5(const MD5File file) |
614
b96f987dbf80
(svn r1038) Feature: OpenTTD runs with the grf files of the DOS version
dominik
parents:
579
diff
changeset
|
99 |
{ |
7574
40e7c5575a2a
(svn r11099) -Codechange: allow on opening of a file via FioFOpenFile to request the size of the file, so we can keep that in mind
truelight
parents:
6917
diff
changeset
|
100 |
size_t size; |
40e7c5575a2a
(svn r11099) -Codechange: allow on opening of a file via FioFOpenFile to request the size of the file, so we can keep that in mind
truelight
parents:
6917
diff
changeset
|
101 |
FILE *f = FioFOpenFile(file.filename, "rb", DATA_DIR, &size); |
5482
0528f1dfb732
(svn r7766) -Fix: [OSX] removed incorrect debug message about corrupted/missing grf files
bjarni
parents:
5475
diff
changeset
|
102 |
|
862
9baf2b0cdb18
(svn r1343) -Fix: [Graphic] Autorail icon is now correct (Darkvater)
truelight
parents:
614
diff
changeset
|
103 |
if (f != NULL) { |
8133
3ab8eaf85ca0
(svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents:
8131
diff
changeset
|
104 |
Md5 checksum; |
3ab8eaf85ca0
(svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents:
8131
diff
changeset
|
105 |
uint8 buffer[1024]; |
3ab8eaf85ca0
(svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents:
8131
diff
changeset
|
106 |
uint8 digest[16]; |
2028
fff064370a36
(svn r2537) Small changes, especially use fprintf to stderr for warnings and errors instead of plain printf
tron
parents:
2027
diff
changeset
|
107 |
size_t len; |
fff064370a36
(svn r2537) Small changes, especially use fprintf to stderr for warnings and errors instead of plain printf
tron
parents:
2027
diff
changeset
|
108 |
|
7574
40e7c5575a2a
(svn r11099) -Codechange: allow on opening of a file via FioFOpenFile to request the size of the file, so we can keep that in mind
truelight
parents:
6917
diff
changeset
|
109 |
while ((len = fread(buffer, 1, (size > sizeof(buffer)) ? sizeof(buffer) : size, f)) != 0 && size != 0) { |
40e7c5575a2a
(svn r11099) -Codechange: allow on opening of a file via FioFOpenFile to request the size of the file, so we can keep that in mind
truelight
parents:
6917
diff
changeset
|
110 |
size -= len; |
8133
3ab8eaf85ca0
(svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents:
8131
diff
changeset
|
111 |
checksum.Append(buffer, len); |
7574
40e7c5575a2a
(svn r11099) -Codechange: allow on opening of a file via FioFOpenFile to request the size of the file, so we can keep that in mind
truelight
parents:
6917
diff
changeset
|
112 |
} |
961 | 113 |
|
7592
792daecf7c77
(svn r11119) -Codechange: analyze .tar files upon loading, remembering their files and offsets, which speeds up .tar handling with a big factor
truelight
parents:
7574
diff
changeset
|
114 |
FioFCloseFile(f); |
1019
6bae6c11e865
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
966
diff
changeset
|
115 |
|
8133
3ab8eaf85ca0
(svn r11695) -Codechange: Converted the md5 algorithm to OOP
skidd13
parents:
8131
diff
changeset
|
116 |
checksum.Finish(digest); |
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
117 |
return memcmp(file.hash, digest, sizeof(file.hash)) == 0; |
961 | 118 |
} else { // file not found |
119 |
return false; |
|
1019
6bae6c11e865
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
966
diff
changeset
|
120 |
} |
961 | 121 |
} |
122 |
||
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
123 |
/** |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
124 |
* Determine the palette that has to be used. |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
125 |
* - forced DOS palette via command line -> leave it that way |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
126 |
* - all Windows files present -> Windows palette |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
127 |
* - all DOS files present -> DOS palette |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
128 |
* - no Windows files present and any DOS file present -> DOS palette |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
129 |
* - otherwise -> Windows palette |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
130 |
*/ |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
131 |
static void DeterminePalette() |
961 | 132 |
{ |
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
133 |
if (_use_dos_palette) return; |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
134 |
|
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
135 |
/* Count of files from the different versions. */ |
1355 | 136 |
uint dos = 0; |
137 |
uint win = 0; |
|
961 | 138 |
|
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
139 |
for (uint i = 0; i < lengthof(files_dos.basic); i++) if (FioCheckFileExists(files_dos.basic[i].filename)) dos++; |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
140 |
for (uint i = 0; i < lengthof(files_dos.landscape); i++) if (FioCheckFileExists(files_dos.landscape[i].filename)) dos++; |
961 | 141 |
|
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
142 |
for (uint i = 0; i < lengthof(files_win.basic); i++) if (FioCheckFileExists(files_win.basic[i].filename)) win++; |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
143 |
for (uint i = 0; i < lengthof(files_win.landscape); i++) if (FioCheckFileExists(files_win.landscape[i].filename)) win++; |
4934
e62da41b70e3
(svn r6921) - PEBKAC: Add an MD5 sum check of our own data files, and warn if they don't match.
peter1138
parents:
4795
diff
changeset
|
144 |
|
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
145 |
if (win == 5) { |
961 | 146 |
_use_dos_palette = false; |
1381 | 147 |
} else if (dos == 5 || (win == 0 && dos > 0)) { |
614
b96f987dbf80
(svn r1038) Feature: OpenTTD runs with the grf files of the DOS version
dominik
parents:
579
diff
changeset
|
148 |
_use_dos_palette = true; |
1380
72aa0a5df4db
(svn r1884) Change palette detection algorithm: Use the DOS palette if there are no Windows .grfs but at least one DOS .grf
tron
parents:
1378
diff
changeset
|
149 |
} else { |
961 | 150 |
_use_dos_palette = false; |
614
b96f987dbf80
(svn r1038) Feature: OpenTTD runs with the grf files of the DOS version
dominik
parents:
579
diff
changeset
|
151 |
} |
b96f987dbf80
(svn r1038) Feature: OpenTTD runs with the grf files of the DOS version
dominik
parents:
579
diff
changeset
|
152 |
} |
b96f987dbf80
(svn r1038) Feature: OpenTTD runs with the grf files of the DOS version
dominik
parents:
579
diff
changeset
|
153 |
|
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
154 |
/** |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
155 |
* Checks whether the MD5 checksums of the files are correct. |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
156 |
* |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
157 |
* @note Also checks sample.cat and other required non-NewGRF GRFs for corruption. |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
158 |
*/ |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
159 |
void CheckExternalFiles() |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
160 |
{ |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
161 |
DeterminePalette(); |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
162 |
|
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
163 |
static const size_t ERROR_MESSAGE_LENGTH = 128; |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
164 |
const FileList *files = _use_dos_palette ? &files_dos : &files_win; |
7882
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
165 |
char error_msg[ERROR_MESSAGE_LENGTH * (lengthof(files->basic) + lengthof(files->landscape) + 3)]; |
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
166 |
error_msg[0] = '\0'; |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
167 |
char *add_pos = error_msg; |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
168 |
|
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
169 |
for (uint i = 0; i < lengthof(files->basic); i++) { |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
170 |
if (!FileMD5(files->basic[i])) { |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
171 |
add_pos += snprintf(add_pos, ERROR_MESSAGE_LENGTH, "Your '%s' file is corrupted or missing! You can find '%s' on your Transport Tycoon Deluxe CD-ROM.\n", files->basic[i].filename, files->basic[i].filename); |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
172 |
} |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
173 |
} |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
174 |
|
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
175 |
for (uint i = 0; i < lengthof(files->landscape); i++) { |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
176 |
if (!FileMD5(files->landscape[i])) { |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
177 |
add_pos += snprintf(add_pos, ERROR_MESSAGE_LENGTH, "Your '%s' file is corrupted or missing! You can find '%s' on your Transport Tycoon Deluxe CD-ROM.\n", files->landscape[i].filename, files->landscape[i].filename); |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
178 |
} |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
179 |
} |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
180 |
|
7882
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
181 |
if (!FileMD5(files_win.sound) && !FileMD5(files_dos.sound)) { |
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
182 |
add_pos += snprintf(add_pos, ERROR_MESSAGE_LENGTH, "Your 'sample.cat' file is corrupted or missing! You can find 'sample.cat' on your Transport Tycoon Deluxe CD-ROM.\n"); |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
183 |
} |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
184 |
|
7882
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
185 |
if (!FileMD5(files->openttd)) { |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
186 |
add_pos += snprintf(add_pos, ERROR_MESSAGE_LENGTH, "Your '%s' file is corrupted or missing! The file was part of your installation.\n", files->openttd.filename); |
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
187 |
} |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
188 |
|
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
189 |
if (add_pos != error_msg) ShowInfoF(error_msg); |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
190 |
} |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
191 |
|
2342
aae24c9661ba
(svn r2868) Change the way NewGRFs are loaded: The loading process i no longer bolted onto the normal graphics loading.
tron
parents:
2340
diff
changeset
|
192 |
|
6247 | 193 |
static void LoadSpriteTables() |
0 | 194 |
{ |
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
195 |
const FileList *files = _use_dos_palette ? &files_dos : &files_win; |
7805
7ab20f94cc80
(svn r11355) -Fix [FS#1377]: loading too many GRFs was not handled gracefully causing crashes and such.
rubidium
parents:
7800
diff
changeset
|
196 |
uint i = FIRST_GRF_SLOT; |
614
b96f987dbf80
(svn r1038) Feature: OpenTTD runs with the grf files of the DOS version
dominik
parents:
579
diff
changeset
|
197 |
|
8411
591f0c085e10
(svn r11981) -Fix [FS#1698]: Use unicode glyph mapping to fix up missing/shuffled sprites in original data files instead of shuffling or skipping
peter1138
parents:
8375
diff
changeset
|
198 |
LoadGrfFile(files->basic[0].filename, 0, i++); |
2353 | 199 |
|
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
200 |
/* |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
201 |
* The second basic file always starts at the given location and does |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
202 |
* contain a different amount of sprites depending on the "type"; DOS |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
203 |
* has a few sprites less. However, we do not care about those missing |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
204 |
* sprites as they are not shown anyway (logos in intro game). |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
205 |
*/ |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
206 |
LoadGrfFile(files->basic[1].filename, 4793, i++); |
0 | 207 |
|
7841
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
208 |
/* |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
209 |
* Load additional sprites for climates other than temperate. |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
210 |
* This overwrites some of the temperate sprites, such as foundations |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
211 |
* and the ground sprites. |
8f9ab4f7064b
(svn r11391) -Change: print all error messages related to missing/corrupted files in one message including the location where they can get said missing/corrupted files.
rubidium
parents:
7805
diff
changeset
|
212 |
*/ |
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9358
diff
changeset
|
213 |
if (_settings_game.game_creation.landscape != LT_TEMPERATE) { |
2309 | 214 |
LoadGrfIndexed( |
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9358
diff
changeset
|
215 |
files->landscape[_settings_game.game_creation.landscape - 1].filename, |
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9358
diff
changeset
|
216 |
_landscape_spriteindexes[_settings_game.game_creation.landscape - 1], |
2309 | 217 |
i++ |
218 |
); |
|
219 |
} |
|
0 | 220 |
|
5156
771ed0d9f836
(svn r7254) -Fix (r7250): move unicode glyph map initialisation to just before newgrf files are loaded, else newgrf glyphs will be cleared out too. (thanks Hadez)
peter1138
parents:
5151
diff
changeset
|
221 |
/* Initialize the unicode to sprite mapping table */ |
771ed0d9f836
(svn r7254) -Fix (r7250): move unicode glyph map initialisation to just before newgrf files are loaded, else newgrf glyphs will be cleared out too. (thanks Hadez)
peter1138
parents:
5151
diff
changeset
|
222 |
InitializeUnicodeGlyphMap(); |
771ed0d9f836
(svn r7254) -Fix (r7250): move unicode glyph map initialisation to just before newgrf files are loaded, else newgrf glyphs will be cleared out too. (thanks Hadez)
peter1138
parents:
5151
diff
changeset
|
223 |
|
7882
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
224 |
/* |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
225 |
* Load the base NewGRF with OTTD required graphics as first NewGRF. |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
226 |
* However, we do not want it to show up in the list of used NewGRFs, |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
227 |
* so we have to manually add it, and then remove it later. |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
228 |
*/ |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
229 |
GRFConfig *top = _grfconfig; |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
230 |
GRFConfig *master = CallocT<GRFConfig>(1); |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
231 |
master->filename = strdup(files->openttd.filename); |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
232 |
FillGRFDetails(master, false); |
7929
6c9b25842b0f
(svn r11482) -Codechange: Remove the doubled function ClrBitT and rename the remaining to fit with the naming style
skidd13
parents:
7882
diff
changeset
|
233 |
ClrBit(master->flags, GCF_INIT_ONLY); |
7882
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
234 |
master->next = top; |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
235 |
_grfconfig = master; |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
236 |
|
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
237 |
LoadNewGRF(SPR_NEWGRFS_BASE, i); |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
238 |
|
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
239 |
/* Free and remove the top element. */ |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
240 |
ClearGRFConfig(&master); |
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7841
diff
changeset
|
241 |
_grfconfig = top; |
0 | 242 |
} |
243 |
||
244 |
||
6247 | 245 |
void GfxLoadSprites() |
1093
4fdc46eaf423
(svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents:
1070
diff
changeset
|
246 |
{ |
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9358
diff
changeset
|
247 |
DEBUG(sprite, 2, "Loading sprite set %d", _settings_game.game_creation.landscape); |
0 | 248 |
|
5151
23150e1b0660
(svn r7246) -Codechange: Always reload sprite and NewGRF data when loading or starting a game, instead of only when the climate type is different.
peter1138
parents:
5000
diff
changeset
|
249 |
GfxInitSpriteMem(); |
23150e1b0660
(svn r7246) -Codechange: Always reload sprite and NewGRF data when loading or starting a game, instead of only when the climate type is different.
peter1138
parents:
5000
diff
changeset
|
250 |
LoadSpriteTables(); |
23150e1b0660
(svn r7246) -Codechange: Always reload sprite and NewGRF data when loading or starting a game, instead of only when the climate type is different.
peter1138
parents:
5000
diff
changeset
|
251 |
GfxInitPalettes(); |
0 | 252 |
} |