src/newgrf.cpp
author belugas
Wed, 03 Oct 2007 00:57:54 +0000
changeset 8162 8e15b94334b5
parent 8161 1e10c2d0811c
child 8168 a1f7d65a60be
permissions -rw-r--r--
(svn r11197) -Fix: It is not useful to reset the override of an entity every time a new grf file is been submitted.
Since newhouses showed the way to newindustries(meaning I copied/adapted a lot of code and processes from it), the behaviour was there for newhouses too.
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
     3
/** @file newgrf.cpp */
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
     4
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include "stdafx.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     6
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     7
#include <stdarg.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     8
1891
92a3b0aa0946 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1883
diff changeset
     9
#include "openttd.h"
1299
0a6510cc889b (svn r1803) Move debugging stuff into files of it's own
tron
parents: 1183
diff changeset
    10
#include "debug.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    11
#include "gfx.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    12
#include "fileio.h"
2163
637ec3c361f5 (svn r2673) Include functions.h directly, not globally via openttd.h
tron
parents: 2159
diff changeset
    13
#include "functions.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    14
#include "engine.h"
2342
c19fb4f2df30 (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
    15
#include "spritecache.h"
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
    16
#include "station.h"
405
6830ae7a0d5d (svn r602) -newgrf: Move DrawTileSeqStruct & co and struct SpriteGroup to sprite.h (pasky)
darkvater
parents: 404
diff changeset
    17
#include "sprite.h"
452
520e4ed6945d (svn r662) [newgrf] Moved grfspecial.c to newgrf.c/newgrf.h
dominik
parents: 449
diff changeset
    18
#include "newgrf.h"
2159
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2013
diff changeset
    19
#include "variables.h"
3566
7bdf06a03960 (svn r4447) - NewGRF: It seems I committed printing action NOP Action 0x0C which is mainly used for comments. So leave it in, but fix the created warning. Use proper action name for check_length() in Action 0x10
Darkvater
parents: 3561
diff changeset
    20
#include "string.h"
7369
26325201d4d7 (svn r10114) -Fix: Only load newgrf error messages if the language matches the current
maedhros
parents: 7366
diff changeset
    21
#include "strings.h"
3821
2bb8a2643fdf (svn r4832) - NewGRF: add support for original string ID to newgrf text handling. So far, this is used for vehicles when no English or American translation is provided.
peter1138
parents: 3814
diff changeset
    22
#include "table/strings.h"
2478
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
    23
#include "bridge.h"
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
    24
#include "town.h"
2506
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
    25
#include "economy.h"
2962
dbd168a4703a (svn r3524) - Split newgrf features from engine.[ch] into newgrf_engine.[ch], and add the new files to project files.
peter1138
parents: 2958
diff changeset
    26
#include "newgrf_engine.h"
3577
9e345c932ba2 (svn r4463) -Codechange. Include vehicle.h directly instead of implicitly via station.h in a number of source files
celestar
parents: 3571
diff changeset
    27
#include "vehicle.h"
3601
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
    28
#include "newgrf_text.h"
3708
1c548218151c (svn r4651) - NewGRF: support loading of catenary sprites from NewGRF files. This actually works by replacing our hardcoded sprites.
peter1138
parents: 3707
diff changeset
    29
#include "table/sprites.h"
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
    30
#include "fontcache.h"
4293
2c24234a7aec (svn r5926) -Codechange: make _cur_year contain the full year, instead of the offset since 1920
rubidium
parents: 4230
diff changeset
    31
#include "date.h"
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
    32
#include "currency.h"
6669
487ac09b95c4 (svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros
parents: 6668
diff changeset
    33
#include "landscape.h"
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
    34
#include "sound.h"
5228
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
    35
#include "newgrf_config.h"
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
    36
#include "newgrf_house.h"
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
    37
#include "newgrf_sound.h"
3595
20621831cd46 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3593
diff changeset
    38
#include "newgrf_spritegroup.h"
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
    39
#include "helpers.hpp"
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
    40
#include "table/town_land.h"
6417
26acff62d001 (svn r8826) -Codechange: Replace _cargoc's separate arrays with a regular struct array (with accessor) and implement new initialization method using cargo labels.
peter1138
parents: 6416
diff changeset
    41
#include "cargotype.h"
7029
209e4b2e1180 (svn r9721) -Codechange: -Codechange: Cleanup of industry_cmd (Step-12). Dynamically build the legends (name and color) for industries in the smallmap_gui.
belugas
parents: 7025
diff changeset
    42
#include "industry.h"
7079
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
    43
#include "newgrf_canal.h"
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
    44
#include "table/build_industry.h"
7125
4ce0c7a12a3f (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas
parents: 7119
diff changeset
    45
#include "newgrf_commons.h"
7452
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
    46
#include "newgrf_townname.h"
7729
21b3ddd80928 (svn r10514) -Codechange: add support for getting the nearest industry with a given type.
rubidium
parents: 7725
diff changeset
    47
#include "newgrf_industries.h"
3595
20621831cd46 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3593
diff changeset
    48
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    49
/* TTDPatch extended GRF format codec
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    50
 * (c) Petr Baudis 2004 (GPL'd)
356
e3721e481b38 (svn r544) -newgrf: codechange for better handling (pasky and octo__)
celestar
parents: 193
diff changeset
    51
 * Changes by Florian octo Forster are (c) by the OpenTTD development team.
e3721e481b38 (svn r544) -newgrf: codechange for better handling (pasky and octo__)
celestar
parents: 193
diff changeset
    52
 *
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    53
 * Contains portions of documentation by TTDPatch team.
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    54
 * Thanks especially to Josef Drexler for the documentation as well as a lot
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    55
 * of help at #tycoon. Also thanks to Michael Blunck for is GRF files which
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    56
 * served as subject to the initial testing of this codec. */
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    57
455
e7ac799e1437 (svn r665) code fixes for newgrf.c/newgrf.h
dominik
parents: 452
diff changeset
    58
2342
c19fb4f2df30 (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
    59
static int _skip_sprites; // XXX
c19fb4f2df30 (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
    60
static uint _file_index; // XXX
5209
fa3ad39e2fa7 (svn r7324) -Codechange: reset newgrf signal location data
peter1138
parents: 5161
diff changeset
    61
SpriteID _signal_base;
5210
dc52acfad05c (svn r7325) -Feature: Add support for action 5 type 0x0D, coast sprites.
peter1138
parents: 5209
diff changeset
    62
SpriteID _coast_base;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    63
2340
0a9f3eeccb96 (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: 2336
diff changeset
    64
static GRFFile *_cur_grffile;
1477
2174a73b11c9 (svn r1981) Typedef some structs and enums
tron
parents: 1439
diff changeset
    65
GRFFile *_first_grffile;
3707
2999a89e8abd (svn r4650) - NewGRF: use the correct type for _cur_spriteid
peter1138
parents: 3704
diff changeset
    66
static SpriteID _cur_spriteid;
5225
52ddcedcc6f7 (svn r7345) -Codechange: enumification of NewGRF loading stage, and move enum definition to header for future use.
peter1138
parents: 5211
diff changeset
    67
static GrfLoadingStage _cur_stage;
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
    68
static uint32 _nfo_line;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    69
5228
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
    70
static GRFConfig *_cur_grfconfig;
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
    71
3814
d0b901dfc313 (svn r4824) - NewGRF: add support for getting/setting miscellaneous grf flags (param 0x9E)
peter1138
parents: 3811
diff changeset
    72
/* Miscellaneous GRF features, set by Action 0x0D, parameter 0x9E */
d0b901dfc313 (svn r4824) - NewGRF: add support for getting/setting miscellaneous grf flags (param 0x9E)
peter1138
parents: 3811
diff changeset
    73
static byte _misc_grf_features = 0;
d0b901dfc313 (svn r4824) - NewGRF: add support for getting/setting miscellaneous grf flags (param 0x9E)
peter1138
parents: 3811
diff changeset
    74
363
cf3cee5f33b4 (svn r551) -newgrf: Preliminary support for TTDPatch flags checking (we just pretend that a bunch of things are on and the rest is off and that's it). Patch by octo, small cleanup by pasky.
darkvater
parents: 362
diff changeset
    75
/* 32 * 8 = 256 flags. Apparently TTDPatch uses this many.. */
cf3cee5f33b4 (svn r551) -newgrf: Preliminary support for TTDPatch flags checking (we just pretend that a bunch of things are on and the rest is off and that's it). Patch by octo, small cleanup by pasky.
darkvater
parents: 362
diff changeset
    76
static uint32 _ttdpatch_flags[8];
cf3cee5f33b4 (svn r551) -newgrf: Preliminary support for TTDPatch flags checking (we just pretend that a bunch of things are on and the rest is off and that's it). Patch by octo, small cleanup by pasky.
darkvater
parents: 362
diff changeset
    77
3895
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
    78
/* Used by Action 0x06 to preload a pseudo sprite and modify its content */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
    79
static byte *_preload_sprite = NULL;
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
    80
7265
74148c363f9d (svn r10005) -Codechange: Merge two flags (2cc and newhouses) indicating some newgrf features have been loaded, and introduce the newindustry one.
belugas
parents: 7261
diff changeset
    81
/* Indicates which are the newgrf features currently loaded ingame */
7410
358b83972e29 (svn r10167) -Codechange: Change the flagging system of grf loaded feature from a bitset to a bool evaluation.
belugas
parents: 7404
diff changeset
    82
GRFLoadedFeatures _loaded_newgrf_features;
363
cf3cee5f33b4 (svn r551) -newgrf: Preliminary support for TTDPatch flags checking (we just pretend that a bunch of things are on and the rest is off and that's it). Patch by octo, small cleanup by pasky.
darkvater
parents: 362
diff changeset
    83
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    84
enum GrfDataType {
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
    85
	GDT_SOUND,
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    86
};
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
    87
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
    88
static byte _grf_data_blocks;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
    89
static GrfDataType _grf_data_type;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
    90
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
    91
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    92
enum grfspec_feature {
373
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
    93
	GSF_TRAIN,
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
    94
	GSF_ROAD,
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
    95
	GSF_SHIP,
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
    96
	GSF_AIRCRAFT,
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
    97
	GSF_STATION,
2438
eaef2b29fa3d (svn r2964) Fix: newgrf: Include missing grf feature canal.
peter1138
parents: 2421
diff changeset
    98
	GSF_CANAL,
391
573193308396 (svn r583) -newgrf: Hopefully prevent GRF files introducing new bridges or townhouses to crash the game (pasky).
darkvater
parents: 389
diff changeset
    99
	GSF_BRIDGE,
573193308396 (svn r583) -newgrf: Hopefully prevent GRF files introducing new bridges or townhouses to crash the game (pasky).
darkvater
parents: 389
diff changeset
   100
	GSF_TOWNHOUSE,
3620
b459e678a003 (svn r4517) - NewGRF: fix and complete the feature list
peter1138
parents: 3614
diff changeset
   101
	GSF_GLOBALVAR,
b459e678a003 (svn r4517) - NewGRF: fix and complete the feature list
peter1138
parents: 3614
diff changeset
   102
	GSF_INDUSTRYTILES,
3601
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
   103
	GSF_INDUSTRIES,
3620
b459e678a003 (svn r4517) - NewGRF: fix and complete the feature list
peter1138
parents: 3614
diff changeset
   104
	GSF_CARGOS,
b459e678a003 (svn r4517) - NewGRF: fix and complete the feature list
peter1138
parents: 3614
diff changeset
   105
	GSF_SOUNDFX,
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   106
};
373
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
   107
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
   108
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   109
typedef void (*SpecialSpriteHandler)(byte *buf, int len);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   110
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
   111
static const uint _vehcounts[4] = {
373
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
   112
	/* GSF_TRAIN */    NUM_TRAIN_ENGINES,
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
   113
	/* GSF_ROAD */     NUM_ROAD_ENGINES,
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
   114
	/* GSF_SHIP */     NUM_SHIP_ENGINES,
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
   115
	/* GSF_AIRCRAFT */ NUM_AIRCRAFT_ENGINES
372
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
   116
};
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
   117
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
   118
static const uint _vehshifts[4] = {
373
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
   119
	/* GSF_TRAIN */    0,
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
   120
	/* GSF_ROAD */     ROAD_ENGINES_INDEX,
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
   121
	/* GSF_SHIP */     SHIP_ENGINES_INDEX,
218e83c92cb8 (svn r561) -newgrf: killed some of the magic numbers in the code (pasky)
celestar
parents: 372
diff changeset
   122
	/* GSF_AIRCRAFT */ AIRCRAFT_ENGINES_INDEX,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   123
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   124
3768
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
   125
enum {
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
   126
	MAX_STATIONS = 256,
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
   127
};
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
   128
2611
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
   129
static uint16 cargo_allowed[TOTAL_NUM_ENGINES];
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
   130
static uint16 cargo_disallowed[TOTAL_NUM_ENGINES];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   131
4961
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
   132
/* Contains the GRF ID of the owner of a vehicle if it has been reserved */
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
   133
static uint32 _grm_engines[TOTAL_NUM_ENGINES];
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
   134
7277
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
   135
/* Contains the GRF ID of the owner of a cargo if it has been reserved */
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
   136
static uint32 _grm_cargos[NUM_CARGO];
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
   137
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   138
/** DEBUG() function dedicated to newGRF debugging messages
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   139
 * Function is essentialy the same as DEBUG(grf, severity, ...) with the
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   140
 * addition of file:line information when parsing grf files.
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   141
 * NOTE: for the above reason(s) grfmsg() should ONLY be used for
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   142
 * loading/parsing grf files, not for runtime debug messages as there
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   143
 * is no file information available during that time.
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   144
 * @param severity debugging severity level, see debug.h
6977
67b989528f3d (svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents: 6975
diff changeset
   145
 * @param str message in printf() format */
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   146
void CDECL grfmsg(int severity, const char *str, ...)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   147
{
65
f9f866bc609c (svn r66) -Fix Station list updated on station deletion/station rename
darkvater
parents: 51
diff changeset
   148
	char buf[1024];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   149
	va_list va;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   150
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   151
	va_start(va, str);
1477
2174a73b11c9 (svn r1981) Typedef some structs and enums
tron
parents: 1439
diff changeset
   152
	vsnprintf(buf, sizeof(buf), str, va);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   153
	va_end(va);
372
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
   154
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   155
	DEBUG(grf, severity, "[%s:%d] %s", _cur_grfconfig->filename, _nfo_line, buf);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   156
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   157
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
   158
static inline bool check_length(int real, int wanted, const char *str)
5567
2af6b4aa2833 (svn r7564) -Codechange: Some newgrf changes. FFIR/EVAW endian-swapping, functionalize
Darkvater
parents: 5557
diff changeset
   159
{
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
   160
	if (real >= wanted) return true;
5567
2af6b4aa2833 (svn r7564) -Codechange: Some newgrf changes. FFIR/EVAW endian-swapping, functionalize
Darkvater
parents: 5557
diff changeset
   161
	grfmsg(0, "%s: Invalid pseudo sprite length %d (expected %d)!", str, real, wanted);
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
   162
	return false;
5567
2af6b4aa2833 (svn r7564) -Codechange: Some newgrf changes. FFIR/EVAW endian-swapping, functionalize
Darkvater
parents: 5557
diff changeset
   163
}
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
   164
500
ef288590e096 (svn r793) Merge INLINE -> inline replacement (revision 376)
tron
parents: 490
diff changeset
   165
static inline byte grf_load_byte(byte **buf)
368
32aad6ad36e1 (svn r556) -newgrf: Some seemingly proper support for loading stages of grf files (octo & pasky).
darkvater
parents: 367
diff changeset
   166
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   167
	return *(*buf)++;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   168
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   169
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   170
static uint16 grf_load_word(byte **buf)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   171
{
3711
4a0d1c635b56 (svn r4654) - Fix [NewGRF]: Properly read in the GRFID. This fixes GRFID checking and activation/deactivation. Do swap the GRFID for displaying purposes.
Darkvater
parents: 3709
diff changeset
   172
	uint16 val = grf_load_byte(buf);
4a0d1c635b56 (svn r4654) - Fix [NewGRF]: Properly read in the GRFID. This fixes GRFID checking and activation/deactivation. Do swap the GRFID for displaying purposes.
Darkvater
parents: 3709
diff changeset
   173
	return val | (grf_load_byte(buf) << 8);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   174
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   175
2346
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
   176
static uint16 grf_load_extended(byte** buf)
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
   177
{
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
   178
	uint16 val;
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
   179
	val = grf_load_byte(buf);
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
   180
	if (val == 0xFF) val = grf_load_word(buf);
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
   181
	return val;
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
   182
}
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
   183
2324
117bd73a0731 (svn r2850) [newgrf] Patch from peter1139
miham
parents: 2204
diff changeset
   184
static uint32 grf_load_dword(byte **buf)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   185
{
3711
4a0d1c635b56 (svn r4654) - Fix [NewGRF]: Properly read in the GRFID. This fixes GRFID checking and activation/deactivation. Do swap the GRFID for displaying purposes.
Darkvater
parents: 3709
diff changeset
   186
	uint32 val = grf_load_word(buf);
4a0d1c635b56 (svn r4654) - Fix [NewGRF]: Properly read in the GRFID. This fixes GRFID checking and activation/deactivation. Do swap the GRFID for displaying purposes.
Darkvater
parents: 3709
diff changeset
   187
	return val | (grf_load_word(buf) << 16);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   188
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   189
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
   190
static uint32 grf_load_var(byte size, byte **buf)
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
   191
{
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
   192
	switch (size) {
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
   193
		case 1: return grf_load_byte(buf);
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
   194
		case 2: return grf_load_word(buf);
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
   195
		case 4: return grf_load_dword(buf);
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
   196
		default:
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
   197
			NOT_REACHED();
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
   198
			return 0;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
   199
	}
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
   200
}
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
   201
6416
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   202
static const char *grf_load_string(byte **buf, size_t max_len)
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   203
{
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   204
	const char *string   = *(const char **)buf;
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   205
	size_t string_length = ttd_strnlen(string, max_len);
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   206
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   207
	if (string_length == max_len) {
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   208
		/* String was not NUL terminated, so make sure it is now. */
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   209
		(*buf)[string_length - 1] = '\0';
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   210
		grfmsg(7, "String was not terminated with a zero byte.");
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   211
	} else {
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   212
		/* Increase the string length to include the NUL byte. */
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   213
		string_length++;
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   214
	}
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   215
	*buf += string_length;
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   216
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   217
	return string;
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   218
}
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
   219
1477
2174a73b11c9 (svn r1981) Typedef some structs and enums
tron
parents: 1439
diff changeset
   220
static GRFFile *GetFileByGRFID(uint32 grfid)
366
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
   221
{
1477
2174a73b11c9 (svn r1981) Typedef some structs and enums
tron
parents: 1439
diff changeset
   222
	GRFFile *file;
366
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
   223
1477
2174a73b11c9 (svn r1981) Typedef some structs and enums
tron
parents: 1439
diff changeset
   224
	for (file = _first_grffile; file != NULL; file = file->next) {
2174a73b11c9 (svn r1981) Typedef some structs and enums
tron
parents: 1439
diff changeset
   225
		if (file->grfid == grfid) break;
2174a73b11c9 (svn r1981) Typedef some structs and enums
tron
parents: 1439
diff changeset
   226
	}
366
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
   227
	return file;
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
   228
}
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
   229
1477
2174a73b11c9 (svn r1981) Typedef some structs and enums
tron
parents: 1439
diff changeset
   230
static GRFFile *GetFileByFilename(const char *filename)
366
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
   231
{
1477
2174a73b11c9 (svn r1981) Typedef some structs and enums
tron
parents: 1439
diff changeset
   232
	GRFFile *file;
366
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
   233
1477
2174a73b11c9 (svn r1981) Typedef some structs and enums
tron
parents: 1439
diff changeset
   234
	for (file = _first_grffile; file != NULL; file = file->next) {
2174a73b11c9 (svn r1981) Typedef some structs and enums
tron
parents: 1439
diff changeset
   235
		if (strcmp(file->filename, filename) == 0) break;
2174a73b11c9 (svn r1981) Typedef some structs and enums
tron
parents: 1439
diff changeset
   236
	}
366
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
   237
	return file;
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
   238
}
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
   239
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
   240
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   241
/** Used when setting an object's property to map to the GRF's strings
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   242
 * while taking in consideration the "drift" between TTDPatch string system and OpenTTD's one
6977
67b989528f3d (svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents: 6975
diff changeset
   243
 * @param grfid Id of the grf file
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   244
 * @param str StringID that we want to have the equivalent in OoenTTD
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   245
 * @return the properly adjusted StringID
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   246
 */
8111
23e6be5756bb (svn r11144) -Codechange: add support for newgrf callbacks 29 and 35
glx
parents: 8101
diff changeset
   247
StringID MapGRFStringID(uint32 grfid, StringID str)
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   248
{
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   249
	/* 0xD0 and 0xDC stand for all the TextIDs in the range
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
   250
	 * of 0xD000 (misc graphics texts) and 0xDC00 (misc persistent texts).
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   251
	 * These strings are unique to each grf file, and thus require to be used with the
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   252
	 * grfid in which they are declared */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   253
	if (GB(str, 8, 8) == 0xD0 || GB(str, 8, 8) == 0xDC) {
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
   254
		return GetGRFStringID(grfid, str);
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   255
	}
8098
e6088f363c48 (svn r11129) -Fix: update some TextID to StringID 'translations' to reflect changes in language files
glx
parents: 8066
diff changeset
   256
#define TEXID_TO_STRINGID(begin, end, stringid) if (str >= begin && str <= end) return str + (stringid - begin)
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
   257
	/* We have some changes in our cargo strings, resulting in some missing. */
8098
e6088f363c48 (svn r11129) -Fix: update some TextID to StringID 'translations' to reflect changes in language files
glx
parents: 8066
diff changeset
   258
	TEXID_TO_STRINGID(0x000E, 0x002D, STR_000E);
e6088f363c48 (svn r11129) -Fix: update some TextID to StringID 'translations' to reflect changes in language files
glx
parents: 8066
diff changeset
   259
	TEXID_TO_STRINGID(0x002E, 0x004D, STR_002E);
e6088f363c48 (svn r11129) -Fix: update some TextID to StringID 'translations' to reflect changes in language files
glx
parents: 8066
diff changeset
   260
	TEXID_TO_STRINGID(0x004E, 0x006D, STR_QUANTITY_NOTHING);
e6088f363c48 (svn r11129) -Fix: update some TextID to StringID 'translations' to reflect changes in language files
glx
parents: 8066
diff changeset
   261
	TEXID_TO_STRINGID(0x006E, 0x008D, STR_QUANTITY_NOTHING);
e6088f363c48 (svn r11129) -Fix: update some TextID to StringID 'translations' to reflect changes in language files
glx
parents: 8066
diff changeset
   262
	TEXID_TO_STRINGID(0x008E, 0x00AD, STR_ABBREV_NOTHING);
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
   263
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   264
	/* Map building names according to our lang file changes
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   265
	 * 0x200F = Tall Office Block, first house name in the original data, the one that TTDPatch stil uses
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   266
	 * 0x201F = Old houses is the last house name.
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   267
	 * OpenTTD does not have exactly the same order aymore, so, the code below allows
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   268
	 * to compensate for the difference */
8098
e6088f363c48 (svn r11129) -Fix: update some TextID to StringID 'translations' to reflect changes in language files
glx
parents: 8066
diff changeset
   269
	TEXID_TO_STRINGID(0x200F, 0x201F, STR_200F_TALL_OFFICE_BLOCK);
e6088f363c48 (svn r11129) -Fix: update some TextID to StringID 'translations' to reflect changes in language files
glx
parents: 8066
diff changeset
   270
e6088f363c48 (svn r11129) -Fix: update some TextID to StringID 'translations' to reflect changes in language files
glx
parents: 8066
diff changeset
   271
	/* Same thing for industries, since the introduction of 4 new strings above STR_482A_PRODUCTION_LAST_MONTH */
e6088f363c48 (svn r11129) -Fix: update some TextID to StringID 'translations' to reflect changes in language files
glx
parents: 8066
diff changeset
   272
	TEXID_TO_STRINGID(0x482A, 0x483B, STR_482A_PRODUCTION_LAST_MONTH);
e6088f363c48 (svn r11129) -Fix: update some TextID to StringID 'translations' to reflect changes in language files
glx
parents: 8066
diff changeset
   273
#undef TEXTID_TO_STRINGID
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   274
8101
fd60816a6c13 (svn r11132) -Fix: NewGRFs seem to assume that STR_NULL is an empty string or so.
rubidium
parents: 8098
diff changeset
   275
	if (str == STR_NULL) return STR_EMPTY;
fd60816a6c13 (svn r11132) -Fix: NewGRFs seem to assume that STR_NULL is an empty string or so.
rubidium
parents: 8098
diff changeset
   276
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   277
	return str;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   278
}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   279
6701
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   280
static uint8 MapDOSColour(uint8 colour)
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   281
{
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   282
	if (_use_dos_palette) return colour;
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   283
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   284
	if (colour < 10) {
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   285
		static uint8 dos_to_win_colour_map[] = { 0, 215, 216, 136, 88, 106, 32, 33, 40, 245 };
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   286
		return dos_to_win_colour_map[colour];
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   287
	}
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   288
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   289
	if (colour >= 245 && colour < 254) return colour - 28;
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   290
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   291
	return colour;
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   292
}
d4c3cb84e494 (svn r9438) -Codechange: Map cargo colours from DOS to Windows if necessary.
peter1138
parents: 6699
diff changeset
   293
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
   294
360
ff657281ae48 (svn r548) -newgrf: minor style changes, and application of boolean type
darkvater
parents: 359
diff changeset
   295
typedef bool (*VCI_Handler)(uint engine, int numinfo, int prop, byte **buf, int len);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   296
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   297
static void dewagonize(int condition, int engine)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   298
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   299
	EngineInfo *ei = &_engine_info[engine];
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   300
	RailVehicleInfo *rvi = &_rail_vehicle_info[engine];
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   301
372
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
   302
	if (condition != 0) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   303
		ei->unk2 &= ~0x80;
6356
688f81d17aec (svn r8753) -Regression (r8455): Do not unilateraly decide that this engine is a single-headed. Only do it if it previously had no power and that now there is. Or something...
belugas
parents: 6223
diff changeset
   304
		if (rvi->railveh_type == RAILVEH_WAGON)
688f81d17aec (svn r8753) -Regression (r8455): Do not unilateraly decide that this engine is a single-headed. Only do it if it previously had no power and that now there is. Or something...
belugas
parents: 6223
diff changeset
   305
			rvi->railveh_type = RAILVEH_SINGLEHEAD;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   306
	} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   307
		ei->unk2 |= 0x80;
6119
b47985557d1e (svn r8455) -Codechange: Give a more meaningful name (railveh_type)to member flags of RailVehInfo, as well as changing the code to reflect the fact that it was not a flag but rather a one value only variable. Doing so, some evaluations have been simplified.
belugas
parents: 6106
diff changeset
   308
		rvi->railveh_type = RAILVEH_WAGON;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   309
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   310
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   311
360
ff657281ae48 (svn r548) -newgrf: minor style changes, and application of boolean type
darkvater
parents: 359
diff changeset
   312
static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp, int len)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   313
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   314
	byte *buf = *bufp;
360
ff657281ae48 (svn r548) -newgrf: minor style changes, and application of boolean type
darkvater
parents: 359
diff changeset
   315
	bool ret = false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   316
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   317
	for (int i = 0; i < numinfo; i++) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   318
		EngineInfo *ei       = &_engine_info[engine + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   319
		RailVehicleInfo *rvi = &_rail_vehicle_info[engine + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   320
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   321
		switch (prop) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   322
			case 0x05: { // Track type
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   323
				uint8 tracktype = grf_load_byte(&buf);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   324
3026
6401a6942660 (svn r3606) - NewGRF: Convert from TTDP railtype values to our own railtypes. (These are currently the same, but won't be forever...)
peter1138
parents: 3023
diff changeset
   325
				switch (tracktype) {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   326
					case 0: rvi->railtype = rvi->engclass >= 2 ? RAILTYPE_ELECTRIC : RAILTYPE_RAIL; break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   327
					case 1: rvi->railtype = RAILTYPE_MONO; break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   328
					case 2: rvi->railtype = RAILTYPE_MAGLEV; break;
3026
6401a6942660 (svn r3606) - NewGRF: Convert from TTDP railtype values to our own railtypes. (These are currently the same, but won't be forever...)
peter1138
parents: 3023
diff changeset
   329
					default:
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   330
						grfmsg(1, "RailVehicleChangeInfo: Invalid track type %d specified, ignoring", tracktype);
3026
6401a6942660 (svn r3606) - NewGRF: Convert from TTDP railtype values to our own railtypes. (These are currently the same, but won't be forever...)
peter1138
parents: 3023
diff changeset
   331
						break;
6401a6942660 (svn r3606) - NewGRF: Convert from TTDP railtype values to our own railtypes. (These are currently the same, but won't be forever...)
peter1138
parents: 3023
diff changeset
   332
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   333
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   334
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   335
			case 0x08: // AI passenger service
7658
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
   336
				/** @todo Tells the AI that this engine is designed for
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
   337
				 * passenger services and shouldn't be used for freight. */
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   338
				grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   339
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   340
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   341
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   342
			case 0x09: { // Speed (1 unit is 1 kmh)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   343
				uint16 speed = grf_load_word(&buf);
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   344
				if (speed == 0xFFFF) speed = 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   345
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   346
				rvi->max_speed = speed;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   347
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   348
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   349
			case 0x0B: { // Power
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   350
				uint16 power = grf_load_word(&buf);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   351
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   352
				if (rvi->railveh_type == RAILVEH_MULTIHEAD) power /= 2;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   353
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   354
				rvi->power = power;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   355
				dewagonize(power, engine + i);
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   356
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   357
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   358
			case 0x0D: { // Running cost factor
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   359
				uint8 runcostfact = grf_load_byte(&buf);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   360
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   361
				if (rvi->railveh_type == RAILVEH_MULTIHEAD) runcostfact /= 2;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   362
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   363
				rvi->running_cost_base = runcostfact;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   364
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   365
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   366
			case 0x0E: { // Running cost base
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   367
				uint32 base = grf_load_dword(&buf);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   368
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   369
				switch (base) {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   370
					case 0x4C30: rvi->running_cost_class = 0; break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   371
					case 0x4C36: rvi->running_cost_class = 1; break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   372
					case 0x4C3C: rvi->running_cost_class = 2; break;
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
   373
					case 0: break; // Used by wagons
5324
b2429a2def00 (svn r7485) -Codechange: [NewGRF] Add debug warning for unsupported running cost bases for rail vehicles.
peter1138
parents: 5317
diff changeset
   374
					default:
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   375
						grfmsg(1, "RailVehicleChangeInfo: Unsupported running cost base 0x%04X, ignoring", base);
5324
b2429a2def00 (svn r7485) -Codechange: [NewGRF] Add debug warning for unsupported running cost bases for rail vehicles.
peter1138
parents: 5317
diff changeset
   376
						break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   377
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   378
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   379
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   380
			case 0x12: { // Sprite ID
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   381
				uint8 spriteid = grf_load_byte(&buf);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   382
2895
943612f25754 (svn r3449) - NewGRF Fix: When changing the sprite ID of a vehicle, if it is not FD (custom graphics), the value needs to changed from a 16bit array offset to an array index. (fixes tropicstw.grf)
peter1138
parents: 2876
diff changeset
   383
				/* TTD sprite IDs point to a location in a 16bit array, but we use it
943612f25754 (svn r3449) - NewGRF Fix: When changing the sprite ID of a vehicle, if it is not FD (custom graphics), the value needs to changed from a 16bit array offset to an array index. (fixes tropicstw.grf)
peter1138
parents: 2876
diff changeset
   384
				 * as an array index, so we need it to be half the original value. */
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   385
				if (spriteid < 0xFD) spriteid >>= 1;
2895
943612f25754 (svn r3449) - NewGRF Fix: When changing the sprite ID of a vehicle, if it is not FD (custom graphics), the value needs to changed from a 16bit array offset to an array index. (fixes tropicstw.grf)
peter1138
parents: 2876
diff changeset
   386
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   387
				rvi->image_index = spriteid;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   388
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   389
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   390
			case 0x13: { // Dual-headed
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   391
				uint8 dual = grf_load_byte(&buf);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   392
372
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
   393
				if (dual != 0) {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   394
					if (rvi->railveh_type != RAILVEH_MULTIHEAD) {
2836
b5e8424f5955 (svn r3384) - NewGRF fix: running cost should be halved for dual head vehicles.
peter1138
parents: 2812
diff changeset
   395
						// adjust power and running cost if needed
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   396
						rvi->power /= 2;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   397
						rvi->running_cost_base /= 2;
2836
b5e8424f5955 (svn r3384) - NewGRF fix: running cost should be halved for dual head vehicles.
peter1138
parents: 2812
diff changeset
   398
					}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   399
					rvi->railveh_type = RAILVEH_MULTIHEAD;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   400
				} else {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   401
					if (rvi->railveh_type == RAILVEH_MULTIHEAD) {
2836
b5e8424f5955 (svn r3384) - NewGRF fix: running cost should be halved for dual head vehicles.
peter1138
parents: 2812
diff changeset
   402
						// adjust power and running cost if needed
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   403
						rvi->power *= 2;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   404
						rvi->running_cost_base *= 2;
2836
b5e8424f5955 (svn r3384) - NewGRF fix: running cost should be halved for dual head vehicles.
peter1138
parents: 2812
diff changeset
   405
					}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   406
					rvi->railveh_type = rvi->power == 0 ?
6126
40a18030c3aa (svn r8465) -Regression (r8455): Switching from dual to single head should switch to wagon if power is zero. .Or something.
peter1138
parents: 6119
diff changeset
   407
						RAILVEH_WAGON : RAILVEH_SINGLEHEAD;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   408
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   409
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   410
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   411
			case 0x14: // Cargo capacity
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   412
				rvi->capacity = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   413
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   414
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   415
			case 0x15: { // Cargo type
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   416
				uint8 ctype = grf_load_byte(&buf);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   417
6606
2e867a1c6b7f (svn r9092) -Codechange: (NewGRF) (re r8885) Also set cargo type as invalid if the chosen type is not available in the current climate.
peter1138
parents: 6585
diff changeset
   418
				if (ctype < NUM_CARGO && HASBIT(_cargo_mask, ctype)) {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   419
					rvi->cargo_type = ctype;
2846
ac8731dd4121 (svn r3394) - NewGRF fix: ignore non-climate dependent cargo types. The spec is rather vague on this, but we don't support newcargos anyway.
peter1138
parents: 2840
diff changeset
   420
				} else {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   421
					rvi->cargo_type = CT_INVALID;
6468
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
   422
					grfmsg(2, "RailVehicleChangeInfo: Invalid cargo type %d, using first refittable", ctype);
2846
ac8731dd4121 (svn r3394) - NewGRF fix: ignore non-climate dependent cargo types. The spec is rather vague on this, but we don't support newcargos anyway.
peter1138
parents: 2840
diff changeset
   423
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   424
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   425
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   426
			case 0x16: // Weight
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   427
				SB(rvi->weight, 0, 8, grf_load_byte(&buf));
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   428
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   429
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   430
			case 0x17: // Cost factor
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   431
				rvi->base_cost = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   432
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   433
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   434
			case 0x18: // AI rank
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   435
				rvi->ai_rank = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   436
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   437
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   438
			case 0x19: { // Engine traction type
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   439
				/* What do the individual numbers mean?
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   440
				 * 0x00 .. 0x07: Steam
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   441
				 * 0x08 .. 0x27: Diesel
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   442
				 * 0x28 .. 0x31: Electric
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   443
				 * 0x32 .. 0x37: Monorail
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   444
				 * 0x38 .. 0x41: Maglev
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   445
				 */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   446
				uint8 traction = grf_load_byte(&buf);
7077
a76fe9c65fcb (svn r9795) -Codechange: enumify the EngineClass.
rubidium
parents: 7075
diff changeset
   447
				EngineClass engclass;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   448
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   449
				if (traction <= 0x07) {
7077
a76fe9c65fcb (svn r9795) -Codechange: enumify the EngineClass.
rubidium
parents: 7075
diff changeset
   450
					engclass = EC_STEAM;
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   451
				} else if (traction <= 0x27) {
7077
a76fe9c65fcb (svn r9795) -Codechange: enumify the EngineClass.
rubidium
parents: 7075
diff changeset
   452
					engclass = EC_DIESEL;
3355
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3095
diff changeset
   453
				} else if (traction <= 0x31) {
7077
a76fe9c65fcb (svn r9795) -Codechange: enumify the EngineClass.
rubidium
parents: 7075
diff changeset
   454
					engclass = EC_ELECTRIC;
7081
279d45234afe (svn r9799) -Codechange: separate engine class and engine running cost class (mart3p).
rubidium
parents: 7079
diff changeset
   455
				} else if (traction <= 0x37) {
279d45234afe (svn r9799) -Codechange: separate engine class and engine running cost class (mart3p).
rubidium
parents: 7079
diff changeset
   456
					engclass = EC_MONORAIL;
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   457
				} else if (traction <= 0x41) {
7081
279d45234afe (svn r9799) -Codechange: separate engine class and engine running cost class (mart3p).
rubidium
parents: 7079
diff changeset
   458
					engclass = EC_MAGLEV;
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   459
				} else {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   460
					break;
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   461
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   462
				if (rvi->railtype == RAILTYPE_RAIL     && engclass >= EC_ELECTRIC) rvi->railtype = RAILTYPE_ELECTRIC;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   463
				if (rvi->railtype == RAILTYPE_ELECTRIC && engclass  < EC_ELECTRIC) rvi->railtype = RAILTYPE_RAIL;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   464
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   465
				rvi->engclass = engclass;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   466
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   467
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   468
			case 0x1A: { // Alter purchase list sort order
2971
9b62397dbd56 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   469
				EngineID pos = grf_load_byte(&buf);
9b62397dbd56 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   470
9b62397dbd56 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   471
				if (pos < NUM_TRAIN_ENGINES) {
9b62397dbd56 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   472
					AlterRailVehListOrder(engine + i, pos);
9b62397dbd56 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   473
				} else {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   474
					grfmsg(2, "RailVehicleChangeInfo: Invalid train engine ID %d, ignoring", pos);
2971
9b62397dbd56 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   475
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   476
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   477
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   478
			case 0x1B: // Powered wagons power bonus
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   479
				rvi->pow_wag_power = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   480
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   481
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   482
			case 0x1C: // Refit cost
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   483
				ei->refit_cost = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   484
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   485
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   486
			case 0x1D: // Refit cargo
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   487
				ei->refit_mask = grf_load_dword(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   488
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   489
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   490
			case 0x1E: // Callback
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   491
				ei->callbackmask = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   492
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   493
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   494
			case 0x1F: // Tractive effort coefficient
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   495
				rvi->tractive_effort = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   496
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   497
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   498
			case 0x21: // Shorter vehicle
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   499
				rvi->shorten_factor = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   500
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   501
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   502
			case 0x22: // Visual effect
7658
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
   503
				/** @see note in engine.h about rvi->visual_effect */
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   504
				rvi->visual_effect = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   505
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   506
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   507
			case 0x23: // Powered wagons weight bonus
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   508
				rvi->pow_wag_weight = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   509
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   510
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   511
			case 0x24: { // High byte of vehicle weight
2542
fdea27216e48 (svn r3071) -NewGRF: Add support for rail vehicle weight greater than 255 tons.
peter1138
parents: 2530
diff changeset
   512
				byte weight = grf_load_byte(&buf);
fdea27216e48 (svn r3071) -NewGRF: Add support for rail vehicle weight greater than 255 tons.
peter1138
parents: 2530
diff changeset
   513
2545
d1965652e523 (svn r3074) -NewGrf: Fix stupid typo in weight setting.
peter1138
parents: 2542
diff changeset
   514
				if (weight > 4) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   515
					grfmsg(2, "RailVehicleChangeInfo: Nonsensical weight of %d tons, ignoring", weight << 8);
2542
fdea27216e48 (svn r3071) -NewGRF: Add support for rail vehicle weight greater than 255 tons.
peter1138
parents: 2530
diff changeset
   516
				} else {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   517
					SB(rvi->weight, 8, 8, weight);
2542
fdea27216e48 (svn r3071) -NewGRF: Add support for rail vehicle weight greater than 255 tons.
peter1138
parents: 2530
diff changeset
   518
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   519
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   520
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   521
			case 0x25: // User-defined bit mask to set when checking veh. var. 42
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   522
				rvi->user_def_data = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   523
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   524
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   525
			case 0x26: // Retire vehicle early
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   526
				ei->retire_early = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   527
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   528
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   529
			case 0x27: // Miscellaneous flags
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   530
				ei->misc_flags = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   531
				_loaded_newgrf_features.has_2CC |= HASBIT(ei->misc_flags, EF_USES_2CC);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   532
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   533
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   534
			case 0x28: // Cargo classes allowed
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   535
				cargo_allowed[engine + i] = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   536
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   537
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   538
			case 0x29: // Cargo classes disallowed
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   539
				cargo_disallowed[engine + i] = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   540
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   541
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   542
			case 0x2A: // Long format introduction date (days since year 0)
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   543
				ei->base_intro = grf_load_dword(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   544
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   545
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   546
			case 0x20: // Air drag
7658
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
   547
				/** @todo Air drag for trains. */
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   548
				grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   549
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   550
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   551
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   552
			default:
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   553
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   554
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   555
		}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   556
	}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   557
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   558
	*bufp = buf;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   559
	return ret;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   560
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   561
378
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   562
static bool RoadVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp, int len)
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   563
{
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   564
	byte *buf = *bufp;
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   565
	bool ret = false;
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   566
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   567
	for (int i = 0; i < numinfo; i++) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   568
		EngineInfo *ei       = &_engine_info[ROAD_ENGINES_INDEX + engine + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   569
		RoadVehicleInfo *rvi = &_road_vehicle_info[engine + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   570
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   571
		switch (prop) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   572
			case 0x08: // Speed (1 unit is 0.5 kmh)
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   573
				rvi->max_speed = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   574
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   575
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   576
			case 0x09: // Running cost factor
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   577
				rvi->running_cost = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   578
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   579
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   580
			case 0x0A: // Running cost base
7658
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
   581
				/** @todo : I have no idea. --pasky
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   582
				 * I THINK it is used for overriding the base cost of all road vehicle (_price.roadveh_base) --belugas */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   583
				grf_load_dword(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   584
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   585
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   586
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   587
			case 0x0E: { // Sprite ID
378
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   588
				uint8 spriteid = grf_load_byte(&buf);
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   589
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
   590
				/* cars have different custom id in the GRF file */
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   591
				if (spriteid == 0xFF) spriteid = 0xFD;
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   592
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   593
				if (spriteid < 0xFD) spriteid >>= 1;
2895
943612f25754 (svn r3449) - NewGRF Fix: When changing the sprite ID of a vehicle, if it is not FD (custom graphics), the value needs to changed from a 16bit array offset to an array index. (fixes tropicstw.grf)
peter1138
parents: 2876
diff changeset
   594
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   595
				rvi->image_index = spriteid;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   596
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   597
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   598
			case 0x0F: // Cargo capacity
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   599
				rvi->capacity = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   600
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   601
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   602
			case 0x10: { // Cargo type
378
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   603
				uint8 cargo = grf_load_byte(&buf);
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   604
6606
2e867a1c6b7f (svn r9092) -Codechange: (NewGRF) (re r8885) Also set cargo type as invalid if the chosen type is not available in the current climate.
peter1138
parents: 6585
diff changeset
   605
				if (cargo < NUM_CARGO && HASBIT(_cargo_mask, cargo)) {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   606
					rvi->cargo_type = cargo;
2846
ac8731dd4121 (svn r3394) - NewGRF fix: ignore non-climate dependent cargo types. The spec is rather vague on this, but we don't support newcargos anyway.
peter1138
parents: 2840
diff changeset
   607
				} else {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   608
					rvi->cargo_type = CT_INVALID;
6468
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
   609
					grfmsg(2, "RoadVehicleChangeInfo: Invalid cargo type %d, using first refittable", cargo);
2846
ac8731dd4121 (svn r3394) - NewGRF fix: ignore non-climate dependent cargo types. The spec is rather vague on this, but we don't support newcargos anyway.
peter1138
parents: 2840
diff changeset
   610
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   611
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   612
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   613
			case 0x11: // Cost factor
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   614
				rvi->base_cost = grf_load_byte(&buf); // ?? is it base_cost?
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   615
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   616
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   617
			case 0x12: // SFX
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   618
				rvi->sfx = (SoundFx)grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   619
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   620
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   621
			case 0x13: // Power in 10hp
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   622
			case 0x14: // Weight in 1/4 tons
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   623
			case 0x15: // Speed in mph*0.8
7658
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
   624
				/** @todo Support for road vehicles realistic power
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   625
				 * computations (called rvpower in TTDPatch) is just
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   626
				 * missing in OTTD yet. --pasky */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   627
				grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   628
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   629
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   630
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   631
			case 0x16: // Cargos available for refitting
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   632
				ei->refit_mask = grf_load_dword(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   633
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   634
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   635
			case 0x17: // Callback mask
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   636
				ei->callbackmask = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   637
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   638
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   639
			case 0x1A: // Refit cost
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   640
				ei->refit_cost = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   641
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   642
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   643
			case 0x1B: // Retire vehicle early
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   644
				ei->retire_early = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   645
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   646
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   647
			case 0x1C: // Miscellaneous flags
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   648
				ei->misc_flags = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   649
				_loaded_newgrf_features.has_2CC |= HASBIT(ei->misc_flags, EF_USES_2CC);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   650
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   651
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   652
			case 0x1D: // Cargo classes allowed
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   653
				cargo_allowed[ROAD_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   654
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   656
			case 0x1E: // Cargo classes disallowed
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   657
				cargo_disallowed[ROAD_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   658
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   659
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   660
			case 0x1F: // Long format introduction date (days since year 0)
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   661
				ei->base_intro = grf_load_dword(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   662
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   663
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   664
			case 0x18: // Tractive effort
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   665
			case 0x19: // Air drag
7658
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
   666
				/** @todo Tractive effort and air drag for road vehicles. */
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   667
				grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   668
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   669
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   670
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   671
			default:
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   672
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   673
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   674
		}
378
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   675
	}
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   676
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   677
	*bufp = buf;
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   678
	return ret;
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   679
}
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
   680
360
ff657281ae48 (svn r548) -newgrf: minor style changes, and application of boolean type
darkvater
parents: 359
diff changeset
   681
static bool ShipVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp, int len)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   682
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   683
	byte *buf = *bufp;
360
ff657281ae48 (svn r548) -newgrf: minor style changes, and application of boolean type
darkvater
parents: 359
diff changeset
   684
	bool ret = false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   685
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   686
	for (int i = 0; i < numinfo; i++) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   687
		EngineInfo *ei       = &_engine_info[SHIP_ENGINES_INDEX + engine + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   688
		ShipVehicleInfo *svi = &_ship_vehicle_info[engine + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   689
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   690
		switch (prop) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   691
			case 0x08: { // Sprite ID
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   692
				uint8 spriteid = grf_load_byte(&buf);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   693
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
   694
				/* ships have different custom id in the GRF file */
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   695
				if (spriteid == 0xFF) spriteid = 0xFD;
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   696
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   697
				if (spriteid < 0xFD) spriteid >>= 1;
2895
943612f25754 (svn r3449) - NewGRF Fix: When changing the sprite ID of a vehicle, if it is not FD (custom graphics), the value needs to changed from a 16bit array offset to an array index. (fixes tropicstw.grf)
peter1138
parents: 2876
diff changeset
   698
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   699
				svi->image_index = spriteid;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   700
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   701
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   702
			case 0x09: // Refittable
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   703
				svi->refittable = (grf_load_byte(&buf) != 0);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   704
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   705
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   706
			case 0x0A: // Cost factor
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   707
				svi->base_cost = grf_load_byte(&buf); // ?? is it base_cost?
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   708
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   709
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   710
			case 0x0B: // Speed (1 unit is 0.5 kmh)
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   711
				svi->max_speed = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   712
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   713
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   714
			case 0x0C: { // Cargo type
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   715
				uint8 cargo = grf_load_byte(&buf);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   716
6606
2e867a1c6b7f (svn r9092) -Codechange: (NewGRF) (re r8885) Also set cargo type as invalid if the chosen type is not available in the current climate.
peter1138
parents: 6585
diff changeset
   717
				if (cargo < NUM_CARGO && HASBIT(_cargo_mask, cargo)) {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   718
					svi->cargo_type = cargo;
2846
ac8731dd4121 (svn r3394) - NewGRF fix: ignore non-climate dependent cargo types. The spec is rather vague on this, but we don't support newcargos anyway.
peter1138
parents: 2840
diff changeset
   719
				} else {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   720
					svi->cargo_type = CT_INVALID;
6468
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
   721
					grfmsg(2, "ShipVehicleChangeInfo: Invalid cargo type %d, using first refittable", cargo);
2846
ac8731dd4121 (svn r3394) - NewGRF fix: ignore non-climate dependent cargo types. The spec is rather vague on this, but we don't support newcargos anyway.
peter1138
parents: 2840
diff changeset
   722
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   723
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   724
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   725
			case 0x0D: // Cargo capacity
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   726
				svi->capacity = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   727
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   728
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   729
			case 0x0F: // Running cost factor
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   730
				svi->running_cost = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   731
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   732
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   733
			case 0x10: // SFX
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   734
				svi->sfx = (SoundFx)grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   735
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   736
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   737
			case 0x11: // Cargos available for refitting
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   738
				ei->refit_mask = grf_load_dword(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   739
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   740
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   741
			case 0x12: // Callback mask
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   742
				ei->callbackmask = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   743
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   744
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   745
			case 0x13: // Refit cost
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   746
				ei->refit_cost = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   747
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   748
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   749
			case 0x16: // Retire vehicle early
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   750
				ei->retire_early = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   751
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   752
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   753
			case 0x17: // Miscellaneous flags
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   754
				ei->misc_flags = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   755
				_loaded_newgrf_features.has_2CC |= HASBIT(ei->misc_flags, EF_USES_2CC);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   756
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   757
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   758
			case 0x18: // Cargo classes allowed
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   759
				cargo_allowed[SHIP_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   760
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   761
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   762
			case 0x19: // Cargo classes disallowed
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   763
				cargo_disallowed[SHIP_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   764
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   765
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   766
			case 0x1A: // Long format introduction date (days since year 0)
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   767
				ei->base_intro = grf_load_dword(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   768
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   769
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   770
			case 0x14: // Ocean speed fraction
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   771
			case 0x15: // Canal speed fraction
7658
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
   772
				/** @todo Speed fractions for ships on oceans and canals */
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   773
				grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   774
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   775
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   776
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   777
			default:
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   778
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   779
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   780
		}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   781
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   782
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   783
	*bufp = buf;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   784
	return ret;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   785
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   786
381
94c4794d6bd4 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents: 379
diff changeset
   787
static bool AircraftVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp, int len)
94c4794d6bd4 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents: 379
diff changeset
   788
{
94c4794d6bd4 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents: 379
diff changeset
   789
	byte *buf = *bufp;
94c4794d6bd4 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents: 379
diff changeset
   790
	bool ret = false;
94c4794d6bd4 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents: 379
diff changeset
   791
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   792
	for (int i = 0; i < numinfo; i++) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   793
		EngineInfo *ei           = &_engine_info[AIRCRAFT_ENGINES_INDEX + engine + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   794
		AircraftVehicleInfo *avi = &_aircraft_vehicle_info[engine + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   795
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   796
		switch (prop) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   797
			case 0x08: { // Sprite ID
381
94c4794d6bd4 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents: 379
diff changeset
   798
				uint8 spriteid = grf_load_byte(&buf);
94c4794d6bd4 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents: 379
diff changeset
   799
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
   800
				/* aircraft have different custom id in the GRF file */
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   801
				if (spriteid == 0xFF) spriteid = 0xFD;
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   802
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
   803
				if (spriteid < 0xFD) spriteid >>= 1;
2895
943612f25754 (svn r3449) - NewGRF Fix: When changing the sprite ID of a vehicle, if it is not FD (custom graphics), the value needs to changed from a 16bit array offset to an array index. (fixes tropicstw.grf)
peter1138
parents: 2876
diff changeset
   804
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   805
				avi->image_index = spriteid;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   806
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   807
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   808
			case 0x09: // Helicopter
4926
f67f27fb122f (svn r6906) - Fix [FS#370]: Clear 'large plane' flag if 'helicopter' flag is set. (mart3p)
peter1138
parents: 4918
diff changeset
   809
				if (grf_load_byte(&buf) == 0) {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   810
					avi->subtype = AIR_HELI;
4926
f67f27fb122f (svn r6906) - Fix [FS#370]: Clear 'large plane' flag if 'helicopter' flag is set. (mart3p)
peter1138
parents: 4918
diff changeset
   811
				} else {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   812
					SB(avi->subtype, 0, 1, 1); // AIR_CTOL
4926
f67f27fb122f (svn r6906) - Fix [FS#370]: Clear 'large plane' flag if 'helicopter' flag is set. (mart3p)
peter1138
parents: 4918
diff changeset
   813
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   814
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   815
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   816
			case 0x0A: // Large
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   817
				SB(avi->subtype, 1, 1, (grf_load_byte(&buf) != 0 ? 1 : 0)); // AIR_FAST
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   818
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   819
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   820
			case 0x0B: // Cost factor
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   821
				avi->base_cost = grf_load_byte(&buf); // ?? is it base_cost?
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   822
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   823
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   824
			case 0x0C: // Speed (1 unit is 8 mph, we translate to 1 unit is 1 km/h)
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   825
				avi->max_speed = (grf_load_byte(&buf) * 129) / 10;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   826
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   827
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   828
			case 0x0D: // Acceleration
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   829
				avi->acceleration = (grf_load_byte(&buf) * 129) / 10;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   830
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   831
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   832
			case 0x0E: // Running cost factor
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   833
				avi->running_cost = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   834
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   835
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   836
			case 0x0F: // Passenger capacity
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   837
				avi->passenger_capacity = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   838
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   839
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   840
			case 0x11: // Mail capacity
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   841
				avi->mail_capacity = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   842
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   843
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   844
			case 0x12: // SFX
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   845
				avi->sfx = (SoundFx)grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   846
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   847
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   848
			case 0x13: // Cargos available for refitting
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   849
				ei->refit_mask = grf_load_dword(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   850
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   851
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   852
			case 0x14: // Callback mask
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   853
				ei->callbackmask = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   854
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   855
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   856
			case 0x15: // Refit cost
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   857
				ei->refit_cost = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   858
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   859
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   860
			case 0x16: // Retire vehicle early
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   861
				ei->retire_early = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   862
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   863
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   864
			case 0x17: // Miscellaneous flags
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   865
				ei->misc_flags = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   866
				_loaded_newgrf_features.has_2CC |= HASBIT(ei->misc_flags, EF_USES_2CC);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   867
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   868
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   869
			case 0x18: // Cargo classes allowed
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   870
				cargo_allowed[AIRCRAFT_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   871
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   872
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   873
			case 0x19: // Cargo classes disallowed
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   874
				cargo_disallowed[AIRCRAFT_ENGINES_INDEX + engine + i] = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   875
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   876
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   877
			case 0x1A: // Long format introduction date (days since year 0)
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   878
				ei->base_intro = grf_load_dword(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   879
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   880
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   881
			default:
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   882
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   883
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   884
		}
381
94c4794d6bd4 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents: 379
diff changeset
   885
	}
94c4794d6bd4 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents: 379
diff changeset
   886
94c4794d6bd4 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents: 379
diff changeset
   887
	*bufp = buf;
94c4794d6bd4 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents: 379
diff changeset
   888
	return ret;
94c4794d6bd4 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents: 379
diff changeset
   889
}
94c4794d6bd4 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents: 379
diff changeset
   890
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   891
static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int len)
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   892
{
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   893
	byte *buf = *bufp;
3505
e9a3a6b79561 (svn r4356) - NewGRF: Load more newstation properties.
peter1138
parents: 3504
diff changeset
   894
	bool ret = false;
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   895
3768
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
   896
	if (stid + numinfo > MAX_STATIONS) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
   897
		grfmsg(1, "StationChangeInfo: Station %u is invalid, max %u, ignoring", stid + numinfo, MAX_STATIONS);
3768
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
   898
		return false;
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
   899
	}
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
   900
3501
cf7d2c33e7fc (svn r4352) - NewGRF Codechange: dynamically allocate the memory used to store custom station data. This saves us approximately 40KB per GRF file, if there are no stations defined.
peter1138
parents: 3488
diff changeset
   901
	/* Allocate station specs if necessary */
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
   902
	if (_cur_grffile->stations == NULL) _cur_grffile->stations = CallocT<StationSpec*>(MAX_STATIONS);
3768
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
   903
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   904
	for (int i = 0; i < numinfo; i++) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   905
		StationSpec *statspec = _cur_grffile->stations[stid + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   906
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   907
		/* Check that the station we are modifying is defined. */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   908
		if (statspec == NULL && prop != 0x08) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   909
			grfmsg(2, "StationChangeInfo: Attempt to modify undefined station %u, ignoring", stid + i);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   910
			continue;
3501
cf7d2c33e7fc (svn r4352) - NewGRF Codechange: dynamically allocate the memory used to store custom station data. This saves us approximately 40KB per GRF file, if there are no stations defined.
peter1138
parents: 3488
diff changeset
   911
		}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   912
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   913
		switch (prop) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   914
			case 0x08: { // Class ID
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   915
				StationSpec **spec = &_cur_grffile->stations[stid + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   916
3768
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
   917
				/* Property 0x08 is special; it is where the station is allocated */
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   918
				if (*spec == NULL) *spec = CallocT<StationSpec>(1);
3768
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
   919
3711
4a0d1c635b56 (svn r4654) - Fix [NewGRF]: Properly read in the GRFID. This fixes GRFID checking and activation/deactivation. Do swap the GRFID for displaying purposes.
Darkvater
parents: 3709
diff changeset
   920
				/* Swap classid because we read it in BE meaning WAYP or DFLT */
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
   921
				uint32 classid = grf_load_dword(&buf);
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   922
				(*spec)->sclass = AllocateStationClass(BSWAP32(classid));
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   923
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   924
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   925
			case 0x09: // Define sprite layout
3676
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
   926
				statspec->tiles = grf_load_extended(&buf);
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
   927
				statspec->renderdata = CallocT<DrawTileSprites>(statspec->tiles);
3740
00a9594628b1 (svn r4722) - Newstations: release station sprite layout data when uninitializing NewGRF data.
peter1138
parents: 3738
diff changeset
   928
				statspec->copied_renderdata = false;
00a9594628b1 (svn r4722) - Newstations: release station sprite layout data when uninitializing NewGRF data.
peter1138
parents: 3738
diff changeset
   929
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
   930
				for (uint t = 0; t < statspec->tiles; t++) {
3676
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
   931
					DrawTileSprites *dts = &statspec->renderdata[t];
3570
f9749bae861e (svn r4452) - NewGRF: switch to unsigned ints for array indices.
peter1138
parents: 3566
diff changeset
   932
					uint seq_count = 0;
2625
66b3d632dcd2 (svn r3167) - NewGRF: Start moving custom station code to separate files.
peter1138
parents: 2624
diff changeset
   933
3737
26341085bbbf (svn r4719) - Newstations: instead of drawing nothing, fall back to the default sprite layout if a station layout specifies so.
peter1138
parents: 3736
diff changeset
   934
					dts->seq = NULL;
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   935
					dts->ground_sprite = grf_load_word(&buf);
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   936
					dts->ground_pal = grf_load_word(&buf);
3775
f3f1ba3111fa (svn r4767) - Newstations: fix loading / use of custom ground sprites
peter1138
parents: 3771
diff changeset
   937
					if (dts->ground_sprite == 0) continue;
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   938
					if (HASBIT(dts->ground_pal, 15)) {
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   939
						CLRBIT(dts->ground_pal, 15);
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   940
						SETBIT(dts->ground_sprite, SPRITE_MODIFIER_USE_OFFSET);
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   941
					}
2625
66b3d632dcd2 (svn r3167) - NewGRF: Start moving custom station code to separate files.
peter1138
parents: 2624
diff changeset
   942
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   943
					while (buf < *bufp + len) {
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   944
						DrawTileSeqStruct *dtss;
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   945
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
   946
						/* no relative bounding box support */
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
   947
						dts->seq = ReallocT((DrawTileSeqStruct*)dts->seq, ++seq_count);
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   948
						dtss = (DrawTileSeqStruct*) &dts->seq[seq_count - 1];
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   949
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   950
						dtss->delta_x = grf_load_byte(&buf);
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   951
						if ((byte) dtss->delta_x == 0x80) break;
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   952
						dtss->delta_y = grf_load_byte(&buf);
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   953
						dtss->delta_z = grf_load_byte(&buf);
4230
cd86b1c47f33 (svn r5787) Rename width, height and unk of struct DrawTileSeqStruct to size_{x,y,z}
tron
parents: 4201
diff changeset
   954
						dtss->size_x = grf_load_byte(&buf);
cd86b1c47f33 (svn r5787) Rename width, height and unk of struct DrawTileSeqStruct to size_{x,y,z}
tron
parents: 4201
diff changeset
   955
						dtss->size_y = grf_load_byte(&buf);
cd86b1c47f33 (svn r5787) Rename width, height and unk of struct DrawTileSeqStruct to size_{x,y,z}
tron
parents: 4201
diff changeset
   956
						dtss->size_z = grf_load_byte(&buf);
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   957
						dtss->image = grf_load_word(&buf);
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   958
						dtss->pal = grf_load_word(&buf);
3771
b34d07131ad1 (svn r4763) - Newstations: revert r4762, instead map bit the palette modifier from bit 14 to bit 31 on GRF load.
peter1138
parents: 3768
diff changeset
   959
3775
f3f1ba3111fa (svn r4767) - Newstations: fix loading / use of custom ground sprites
peter1138
parents: 3771
diff changeset
   960
						/* Remap flags as ours collide */
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   961
						if (HASBIT(dtss->pal, 15)) {
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   962
							CLRBIT(dtss->pal, 15);
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   963
							SETBIT(dtss->image, SPRITE_MODIFIER_USE_OFFSET);
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   964
						}
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   965
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   966
						if (HASBIT(dtss->image, 15)) {
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   967
							CLRBIT(dtss->image, 15);
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   968
							SETBIT(dtss->image, PALETTE_MODIFIER_COLOR);
3775
f3f1ba3111fa (svn r4767) - Newstations: fix loading / use of custom ground sprites
peter1138
parents: 3771
diff changeset
   969
						}
3771
b34d07131ad1 (svn r4763) - Newstations: revert r4762, instead map bit the palette modifier from bit 14 to bit 31 on GRF load.
peter1138
parents: 3768
diff changeset
   970
						if (HASBIT(dtss->image, 14)) {
b34d07131ad1 (svn r4763) - Newstations: revert r4762, instead map bit the palette modifier from bit 14 to bit 31 on GRF load.
peter1138
parents: 3768
diff changeset
   971
							CLRBIT(dtss->image, 14);
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
   972
							SETBIT(dtss->image, PALETTE_MODIFIER_TRANSPARENT);
3771
b34d07131ad1 (svn r4763) - Newstations: revert r4762, instead map bit the palette modifier from bit 14 to bit 31 on GRF load.
peter1138
parents: 3768
diff changeset
   973
						}
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   974
					}
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
   975
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   976
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   977
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   978
			case 0x0A: { // Copy sprite layout
398
20f8a2faf809 (svn r590) -newgrf: Instead of a bunch of statinfo arrays, use station-array of struct StationSpec-s (pasky).
darkvater
parents: 397
diff changeset
   979
				byte srcid = grf_load_byte(&buf);
3768
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
   980
				const StationSpec *srcstatspec = _cur_grffile->stations[srcid];
398
20f8a2faf809 (svn r590) -newgrf: Instead of a bunch of statinfo arrays, use station-array of struct StationSpec-s (pasky).
darkvater
parents: 397
diff changeset
   981
3676
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
   982
				statspec->tiles = srcstatspec->tiles;
3738
d41775f0f3fb (svn r4720) - Newstations: instead of literally copying sprite layout data, just copy the pointer to the existing data.
peter1138
parents: 3737
diff changeset
   983
				statspec->renderdata = srcstatspec->renderdata;
3740
00a9594628b1 (svn r4722) - Newstations: release station sprite layout data when uninitializing NewGRF data.
peter1138
parents: 3738
diff changeset
   984
				statspec->copied_renderdata = true;
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   985
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   986
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   987
			case 0x0B: // Callback mask
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   988
				statspec->callbackmask = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   989
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   990
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   991
			case 0x0C: // Disallowed number of platforms
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   992
				statspec->disallowed_platforms = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   993
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   994
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   995
			case 0x0D: // Disallowed platform lengths
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   996
				statspec->disallowed_lengths = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   997
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   998
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
   999
			case 0x0E: // Define custom layout
5060
2d577061b0ec (svn r7113) -Codechange: [NewStations] Add support for copying custom station layouts
peter1138
parents: 5037
diff changeset
  1000
				statspec->copied_layouts = false;
2d577061b0ec (svn r7113) -Codechange: [NewStations] Add support for copying custom station layouts
peter1138
parents: 5037
diff changeset
  1001
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  1002
				while (buf < *bufp + len) {
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  1003
					byte length = grf_load_byte(&buf);
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  1004
					byte number = grf_load_byte(&buf);
449
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1005
					StationLayout layout;
3570
f9749bae861e (svn r4452) - NewGRF: switch to unsigned ints for array indices.
peter1138
parents: 3566
diff changeset
  1006
					uint l, p;
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  1007
449
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1008
					if (length == 0 || number == 0) break;
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1009
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1010
					//debug("l %d > %d ?", length, stat->lengths);
3676
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1011
					if (length > statspec->lengths) {
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  1012
						statspec->platforms = ReallocT(statspec->platforms, length);
3676
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1013
						memset(statspec->platforms + statspec->lengths, 0, length - statspec->lengths);
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1014
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  1015
						statspec->layouts = ReallocT(statspec->layouts, length);
3676
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1016
						memset(statspec->layouts + statspec->lengths, 0,
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1017
						       (length - statspec->lengths) * sizeof(*statspec->layouts));
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1018
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1019
						statspec->lengths = length;
449
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1020
					}
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1021
					l = length - 1; // index is zero-based
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1022
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1023
					//debug("p %d > %d ?", number, stat->platforms[l]);
3676
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1024
					if (number > statspec->platforms[l]) {
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  1025
						statspec->layouts[l] = ReallocT(statspec->layouts[l], number);
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  1026
						/* We expect NULL being 0 here, but C99 guarantees that. */
3676
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1027
						memset(statspec->layouts[l] + statspec->platforms[l], 0,
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1028
						       (number - statspec->platforms[l]) * sizeof(**statspec->layouts));
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1029
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1030
						statspec->platforms[l] = number;
449
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1031
					}
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1032
542
2f35c4770b06 (svn r939) -Fix: Fixed compiler errors
truelight
parents: 536
diff changeset
  1033
					p = 0;
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  1034
					layout = MallocT<byte>(length * number);
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  1035
					for (l = 0; l < length; l++) {
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  1036
						for (p = 0; p < number; p++) {
449
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1037
							layout[l * number + p] = grf_load_byte(&buf);
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  1038
						}
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  1039
					}
449
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1040
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1041
					l--;
d9325d9f24bb (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents: 448
diff changeset
  1042
					p--;
3676
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1043
					free(statspec->layouts[l][p]);
48444d881fbe (svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents: 3672
diff changeset
  1044
					statspec->layouts[l][p] = layout;
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  1045
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1046
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1047
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1048
			case 0x0F: { // Copy custom layout
5060
2d577061b0ec (svn r7113) -Codechange: [NewStations] Add support for copying custom station layouts
peter1138
parents: 5037
diff changeset
  1049
				byte srcid = grf_load_byte(&buf);
2d577061b0ec (svn r7113) -Codechange: [NewStations] Add support for copying custom station layouts
peter1138
parents: 5037
diff changeset
  1050
				const StationSpec *srcstatspec = _cur_grffile->stations[srcid];
2d577061b0ec (svn r7113) -Codechange: [NewStations] Add support for copying custom station layouts
peter1138
parents: 5037
diff changeset
  1051
2d577061b0ec (svn r7113) -Codechange: [NewStations] Add support for copying custom station layouts
peter1138
parents: 5037
diff changeset
  1052
				statspec->lengths   = srcstatspec->lengths;
2d577061b0ec (svn r7113) -Codechange: [NewStations] Add support for copying custom station layouts
peter1138
parents: 5037
diff changeset
  1053
				statspec->platforms = srcstatspec->platforms;
2d577061b0ec (svn r7113) -Codechange: [NewStations] Add support for copying custom station layouts
peter1138
parents: 5037
diff changeset
  1054
				statspec->layouts   = srcstatspec->layouts;
2d577061b0ec (svn r7113) -Codechange: [NewStations] Add support for copying custom station layouts
peter1138
parents: 5037
diff changeset
  1055
				statspec->copied_layouts = true;
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1056
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1057
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1058
			case 0x10: // Little/lots cargo threshold
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1059
				statspec->cargo_threshold = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1060
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1061
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1062
			case 0x11: // Pylon placement
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1063
				statspec->pylons = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1064
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1065
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1066
			case 0x12: // Cargo types for random triggers
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1067
				statspec->cargo_triggers = grf_load_dword(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1068
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1069
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1070
			case 0x13: // General flags
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1071
				statspec->flags = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1072
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1073
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1074
			case 0x14: // Overhead wire placement
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1075
				statspec->wires = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1076
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1077
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1078
			case 0x15: // Blocked tiles
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1079
				statspec->blocked = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1080
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1081
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1082
			case 0x16: // @todo Animation info
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1083
				grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1084
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1085
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1086
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1087
			case 0x17: // @todo Animation speed
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1088
				grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1089
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1090
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1091
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1092
			case 0x18: // @todo Animation triggers
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1093
				grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1094
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1095
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1096
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1097
			default:
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1098
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1099
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1100
		}
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  1101
	}
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  1102
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  1103
	*bufp = buf;
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  1104
	return ret;
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  1105
}
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  1106
2478
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1107
static bool BridgeChangeInfo(uint brid, int numinfo, int prop, byte **bufp, int len)
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1108
{
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1109
	byte *buf = *bufp;
3504
546b53897c01 (svn r4355) - NewGRF: Minor clean up; use the correct return type and remove extraneous brackets.
peter1138
parents: 3501
diff changeset
  1110
	bool ret = false;
2478
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1111
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1112
	if (brid + numinfo > MAX_BRIDGES) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1113
		grfmsg(1, "BridgeChangeInfo: Bridge %u is invalid, max %u, ignoring", brid + numinfo, MAX_BRIDGES);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1114
		return false;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1115
	}
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1116
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1117
	for (int i = 0; i < numinfo; i++) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1118
		Bridge *bridge = &_bridge[brid + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1119
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1120
		switch (prop) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1121
			case 0x08: // Year of availability
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1122
				bridge->avail_year = ORIGINAL_BASE_YEAR + grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1123
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1124
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1125
			case 0x09: // Minimum length
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1126
				bridge->min_length = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1127
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1128
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1129
			case 0x0A: // Maximum length
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1130
				bridge->max_length = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1131
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1132
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1133
			case 0x0B: // Cost factor
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1134
				bridge->price = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1135
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1136
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1137
			case 0x0C: // Maximum speed
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1138
				bridge->speed = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1139
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1140
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1141
			case 0x0D: { // Bridge sprite tables
2478
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1142
				byte tableid = grf_load_byte(&buf);
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1143
				byte numtables = grf_load_byte(&buf);
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1144
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1145
				if (bridge->sprite_table == NULL) {
3555
7a4f6e2aee0f (svn r4429) - CodeChange[newgrf]: Action0, prop 0x0D. use calloc to allocate memory and zero it out and change the loop a little
Darkvater
parents: 3548
diff changeset
  1146
					/* Allocate memory for sprite table pointers and zero out */
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  1147
					bridge->sprite_table = CallocT<PalSpriteID*>(7);
2478
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1148
				}
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1149
3555
7a4f6e2aee0f (svn r4429) - CodeChange[newgrf]: Action0, prop 0x0D. use calloc to allocate memory and zero it out and change the loop a little
Darkvater
parents: 3548
diff changeset
  1150
				for (; numtables-- != 0; tableid++) {
7a4f6e2aee0f (svn r4429) - CodeChange[newgrf]: Action0, prop 0x0D. use calloc to allocate memory and zero it out and change the loop a little
Darkvater
parents: 3548
diff changeset
  1151
					if (tableid >= 7) { // skip invalid data
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  1152
						grfmsg(1, "BridgeChangeInfo: Table %d >= 7, skipping", tableid);
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  1153
						for (byte sprite = 0; sprite < 32; sprite++) grf_load_dword(&buf);
3555
7a4f6e2aee0f (svn r4429) - CodeChange[newgrf]: Action0, prop 0x0D. use calloc to allocate memory and zero it out and change the loop a little
Darkvater
parents: 3548
diff changeset
  1154
						continue;
2478
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1155
					}
3555
7a4f6e2aee0f (svn r4429) - CodeChange[newgrf]: Action0, prop 0x0D. use calloc to allocate memory and zero it out and change the loop a little
Darkvater
parents: 3548
diff changeset
  1156
7a4f6e2aee0f (svn r4429) - CodeChange[newgrf]: Action0, prop 0x0D. use calloc to allocate memory and zero it out and change the loop a little
Darkvater
parents: 3548
diff changeset
  1157
					if (bridge->sprite_table[tableid] == NULL) {
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  1158
						bridge->sprite_table[tableid] = MallocT<PalSpriteID>(32);
3555
7a4f6e2aee0f (svn r4429) - CodeChange[newgrf]: Action0, prop 0x0D. use calloc to allocate memory and zero it out and change the loop a little
Darkvater
parents: 3548
diff changeset
  1159
					}
7a4f6e2aee0f (svn r4429) - CodeChange[newgrf]: Action0, prop 0x0D. use calloc to allocate memory and zero it out and change the loop a little
Darkvater
parents: 3548
diff changeset
  1160
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  1161
					for (byte sprite = 0; sprite < 32; sprite++) {
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
  1162
						SpriteID image = grf_load_word(&buf);
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
  1163
						SpriteID pal   = grf_load_word(&buf);
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
  1164
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
  1165
						if (HASBIT(pal, 15)) {
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
  1166
							SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
  1167
						}
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
  1168
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
  1169
						/* Clear old color modifer bit */
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
  1170
						CLRBIT(image, 15);
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
  1171
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
  1172
						bridge->sprite_table[tableid][sprite].sprite = image;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
  1173
						bridge->sprite_table[tableid][sprite].pal    = pal;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5868
diff changeset
  1174
					}
2478
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1175
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1176
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1177
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1178
			case 0x0E: // Flags; bit 0 - disable far pillars
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1179
				bridge->flags = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1180
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1181
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1182
			case 0x0F: // Long format year of availability (year since year 0)
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1183
				bridge->avail_year = clamp(grf_load_dword(&buf), MIN_YEAR, MAX_YEAR);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1184
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1185
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1186
			default:
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1187
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1188
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1189
		}
2478
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1190
	}
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1191
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1192
	*bufp = buf;
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1193
	return ret;
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  1194
}
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  1195
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1196
static bool TownHouseChangeInfo(uint hid, int numinfo, int prop, byte **bufp, int len)
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1197
{
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1198
	byte *buf = *bufp;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1199
	bool ret = false;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1200
7657
1b1d190f0272 (svn r10435) -Fix (r9315): numinfo starts from 1, not 0, so make it possible to define a house with a local id of 255.
maedhros
parents: 7656
diff changeset
  1201
	if (hid + numinfo > HOUSE_MAX) {
1b1d190f0272 (svn r10435) -Fix (r9315): numinfo starts from 1, not 0, so make it possible to define a house with a local id of 255.
maedhros
parents: 7656
diff changeset
  1202
		grfmsg(1, "TownHouseChangeInfo: Too many houses loaded (%u), max (%u). Ignoring.", hid + numinfo, HOUSE_MAX);
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1203
		return false;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1204
	}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1205
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1206
	/* Allocate house specs if they haven't been allocated already. */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1207
	if (_cur_grffile->housespec == NULL) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1208
		_cur_grffile->housespec = CallocT<HouseSpec*>(HOUSE_MAX);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1209
	}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1210
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1211
	for (int i = 0; i < numinfo; i++) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1212
		HouseSpec *housespec = _cur_grffile->housespec[hid + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1213
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1214
		if (prop != 0x08 && housespec == NULL) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1215
			grfmsg(2, "TownHouseChangeInfo: Attempt to modify undefined house %u. Ignoring.", hid + i);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1216
			continue;
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1217
		}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1218
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1219
		switch (prop) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1220
			case 0x08: { // Substitute building type, and definition of a new house
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1221
				HouseSpec **house = &_cur_grffile->housespec[hid + i];
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1222
				byte subs_id = grf_load_byte(&buf);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1223
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1224
				if (subs_id == 0xFF) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1225
					/* Instead of defining a new house, a substitute house id
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1226
					 * of 0xFF disables the old house with the current id. */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1227
					_house_specs[hid + i].enabled = false;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1228
					continue;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1229
				} else if (subs_id >= NEW_HOUSE_OFFSET) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1230
					/* The substitute id must be one of the original houses. */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1231
					grfmsg(2, "TownHouseChangeInfo: Attempt to use new house %u as substitute house for %u. Ignoring.", subs_id, hid + i);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1232
					return false;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1233
				}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1234
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1235
				/* Allocate space for this house. */
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1236
				if (*house == NULL) *house = CallocT<HouseSpec>(1);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1237
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1238
				housespec = *house;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1239
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1240
				memcpy(housespec, &_house_specs[subs_id], sizeof(_house_specs[subs_id]));
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1241
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1242
				housespec->enabled = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1243
				housespec->local_id = hid + i;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1244
				housespec->substitute_id = subs_id;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1245
				housespec->grffile = _cur_grffile;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1246
				housespec->random_colour[0] = 0x04;  // those 4 random colours are the base colour
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1247
				housespec->random_colour[1] = 0x08;  // for all new houses
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1248
				housespec->random_colour[2] = 0x0C;  // they stand for red, blue, orange and green
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1249
				housespec->random_colour[3] = 0x06;
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1250
7927
21746ebe2ddb (svn r10836) -Fix [FS#1014]: Make sure the third cargo type accepted by houses is valid in
maedhros
parents: 7783
diff changeset
  1251
				/* Make sure that the third cargo type is valid in this
21746ebe2ddb (svn r10836) -Fix [FS#1014]: Make sure the third cargo type accepted by houses is valid in
maedhros
parents: 7783
diff changeset
  1252
				 * climate. This can cause problems when copying the properties
21746ebe2ddb (svn r10836) -Fix [FS#1014]: Make sure the third cargo type accepted by houses is valid in
maedhros
parents: 7783
diff changeset
  1253
				 * of a house that accepts food, where the new house is valid
21746ebe2ddb (svn r10836) -Fix [FS#1014]: Make sure the third cargo type accepted by houses is valid in
maedhros
parents: 7783
diff changeset
  1254
				 * in the temperate climate. */
21746ebe2ddb (svn r10836) -Fix [FS#1014]: Make sure the third cargo type accepted by houses is valid in
maedhros
parents: 7783
diff changeset
  1255
				if (!GetCargo(housespec->accepts_cargo[2])->IsValid()) {
21746ebe2ddb (svn r10836) -Fix [FS#1014]: Make sure the third cargo type accepted by houses is valid in
maedhros
parents: 7783
diff changeset
  1256
					housespec->cargo_acceptance[2] = 0;
21746ebe2ddb (svn r10836) -Fix [FS#1014]: Make sure the third cargo type accepted by houses is valid in
maedhros
parents: 7783
diff changeset
  1257
				}
21746ebe2ddb (svn r10836) -Fix [FS#1014]: Make sure the third cargo type accepted by houses is valid in
maedhros
parents: 7783
diff changeset
  1258
7658
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
  1259
				/**
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
  1260
				 * New houses do not (currently) expect to have a default start
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
  1261
				 * date before 1930, as this breaks the build date stuff.
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
  1262
				 * @see FinaliseHouseArray() for more details.
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
  1263
				 */
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1264
				if (housespec->min_date < 1930) housespec->min_date = 1930;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1265
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1266
				_loaded_newgrf_features.has_newhouses = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1267
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1268
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1269
			case 0x09: // Building flags
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1270
				housespec->building_flags = (BuildingFlags)grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1271
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1272
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1273
			case 0x0A: { // Availability years
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1274
				uint16 years = grf_load_word(&buf);
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1275
				housespec->min_date = GB(years, 0, 8) > 150 ? MAX_YEAR : ORIGINAL_BASE_YEAR + GB(years, 0, 8);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1276
				housespec->max_date = GB(years, 8, 8) > 150 ? MAX_YEAR : ORIGINAL_BASE_YEAR + GB(years, 8, 8);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1277
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1278
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1279
			case 0x0B: // Population
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1280
				housespec->population = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1281
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1282
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1283
			case 0x0C: // Mail generation multiplier
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1284
				housespec->mail_generation = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1285
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1286
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1287
			case 0x0D: // Passenger acceptance
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1288
			case 0x0E: // Mail acceptance
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1289
				housespec->cargo_acceptance[prop - 0x0D] = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1290
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1291
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1292
			case 0x0F: { // Goods/candy, food/fizzy drinks acceptance
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1293
				int8 goods = grf_load_byte(&buf);
6667
437af4c23305 (svn r9366) -Codechange: Unify the different houses acceptances attributes on their cargo counterpart, as well as specifying cargo slot.
belugas
parents: 6658
diff changeset
  1294
437af4c23305 (svn r9366) -Codechange: Unify the different houses acceptances attributes on their cargo counterpart, as well as specifying cargo slot.
belugas
parents: 6658
diff changeset
  1295
				/* If value of goods is negative, it means in fact food or, if in toyland, fizzy_drink acceptance.
437af4c23305 (svn r9366) -Codechange: Unify the different houses acceptances attributes on their cargo counterpart, as well as specifying cargo slot.
belugas
parents: 6658
diff changeset
  1296
				 * Else, we have "standard" 3rd cargo type, goods or candy, for toyland once more */
7927
21746ebe2ddb (svn r10836) -Fix [FS#1014]: Make sure the third cargo type accepted by houses is valid in
maedhros
parents: 7783
diff changeset
  1297
				CargoID cid = (goods >= 0) ? ((_opt.landscape == LT_TOYLAND) ? CT_CANDY : CT_GOODS) :
6683
7ec558346172 (svn r9400) -Codechange: Use some more representative enum names for landscape types.
belugas
parents: 6676
diff changeset
  1298
						((_opt.landscape == LT_TOYLAND) ? CT_FIZZY_DRINKS : CT_FOOD);
6667
437af4c23305 (svn r9366) -Codechange: Unify the different houses acceptances attributes on their cargo counterpart, as well as specifying cargo slot.
belugas
parents: 6658
diff changeset
  1299
7927
21746ebe2ddb (svn r10836) -Fix [FS#1014]: Make sure the third cargo type accepted by houses is valid in
maedhros
parents: 7783
diff changeset
  1300
				/* Make sure the cargo type is valid in this climate. */
21746ebe2ddb (svn r10836) -Fix [FS#1014]: Make sure the third cargo type accepted by houses is valid in
maedhros
parents: 7783
diff changeset
  1301
				if (!GetCargo(cid)->IsValid()) goods = 0;
21746ebe2ddb (svn r10836) -Fix [FS#1014]: Make sure the third cargo type accepted by houses is valid in
maedhros
parents: 7783
diff changeset
  1302
21746ebe2ddb (svn r10836) -Fix [FS#1014]: Make sure the third cargo type accepted by houses is valid in
maedhros
parents: 7783
diff changeset
  1303
				housespec->accepts_cargo[2] = cid;
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1304
				housespec->cargo_acceptance[2] = abs(goods); // but we do need positive value here
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1305
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1306
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1307
			case 0x10: // Local authority rating decrease on removal
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1308
				housespec->remove_rating_decrease = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1309
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1310
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1311
			case 0x11: // Removal cost multiplier
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1312
				housespec->removal_cost = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1313
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1314
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1315
			case 0x12: // Building name ID
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1316
				housespec->building_name = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1317
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1318
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1319
			case 0x13: // Building availability mask
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1320
				housespec->building_availability = (HouseZones)grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1321
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1322
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1323
			case 0x14: // House callback flags
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1324
				housespec->callback_mask = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1325
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1326
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1327
			case 0x15: { // House override byte
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1328
				byte override = grf_load_byte(&buf);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1329
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1330
				/* The house being overridden must be an original house. */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1331
				if (override >= NEW_HOUSE_OFFSET) {
7656
bd97032a569a (svn r10434) -Fix (r9315): When setting multiple house overrides in one Action 0, don't override them all with the first ID.
maedhros
parents: 7655
diff changeset
  1332
					grfmsg(2, "TownHouseChangeInfo: Attempt to override new house %u with house id %u. Ignoring.", override, hid + i);
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1333
					continue;
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1334
				}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1335
7656
bd97032a569a (svn r10434) -Fix (r9315): When setting multiple house overrides in one Action 0, don't override them all with the first ID.
maedhros
parents: 7655
diff changeset
  1336
				_house_mngr.Add(hid + i, override);
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1337
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1338
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1339
			case 0x16: // Periodic refresh multiplier
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1340
				housespec->processing_time = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1341
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1342
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1343
			case 0x17: // Four random colours to use
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1344
				for (uint j = 0; j < 4; j++) housespec->random_colour[j] = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1345
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1346
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1347
			case 0x18: // Relative probability of appearing
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1348
				housespec->probability = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1349
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1350
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1351
			case 0x19: // Extra flags
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1352
				housespec->extra_flags = (HouseExtraFlags)grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1353
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1354
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1355
			case 0x1A: // Animation frames
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1356
				housespec->animation_frames = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1357
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1358
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1359
			case 0x1B: // Animation speed
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1360
				housespec->animation_speed = clamp(grf_load_byte(&buf), 2, 16);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1361
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1362
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1363
			case 0x1C: // Class of the building type
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1364
				housespec->class_id = AllocateHouseClassID(grf_load_byte(&buf), _cur_grffile->grfid);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1365
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1366
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1367
			case 0x1D: // Callback flags 2
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1368
				housespec->callback_mask |= (grf_load_byte(&buf) << 8);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1369
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1370
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1371
			case 0x1E: { // Accepted cargo types
6957
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1372
				uint32 cargotypes = grf_load_dword(&buf);
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1373
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1374
				/* Check if the cargo types should not be changed */
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1375
				if (cargotypes == 0xFFFFFFFF) break;
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1376
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1377
				for (uint j = 0; j < 3; j++) {
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1378
					/* Get the cargo number from the 'list' */
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1379
					uint8 cargo_part = GB(cargotypes, 8 * j, 8);
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1380
					CargoID cargo = GetCargoTranslation(cargo_part, _cur_grffile);
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1381
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1382
					if (cargo == CT_INVALID) {
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1383
						/* Disable acceptance of invalid cargo type */
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1384
						housespec->cargo_acceptance[j] = 0;
6957
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1385
					} else {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1386
						housespec->accepts_cargo[j] = cargo;
6957
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1387
					}
55b90cc74f67 (svn r9621) -Codechange: implement newgrf house property 1E (cargo types)
peter1138
parents: 6947
diff changeset
  1388
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1389
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1390
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1391
			case 0x1F: // Minimum life span
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1392
				housespec->minimum_life = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1393
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1394
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1395
			default:
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1396
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1397
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1398
		}
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1399
	}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1400
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1401
	*bufp = buf;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1402
	return ret;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1403
}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  1404
2506
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  1405
static bool GlobalVarChangeInfo(uint gvid, int numinfo, int prop, byte **bufp, int len)
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  1406
{
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  1407
	byte *buf = *bufp;
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  1408
	bool ret = false;
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  1409
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1410
	for (int i = 0; i < numinfo; i++) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1411
		switch (prop) {
7658
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
  1412
			case 0x08: { // Cost base factor
2506
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  1413
				byte factor = grf_load_byte(&buf);
2508
c1a1af1920ce (svn r3034) -NewGRF: Improve error checking of setting price bases.
peter1138
parents: 2506
diff changeset
  1414
				uint price = gvid + i;
2506
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  1415
2508
c1a1af1920ce (svn r3034) -NewGRF: Improve error checking of setting price bases.
peter1138
parents: 2506
diff changeset
  1416
				if (price < NUM_PRICES) {
c1a1af1920ce (svn r3034) -NewGRF: Improve error checking of setting price bases.
peter1138
parents: 2506
diff changeset
  1417
					SetPriceBaseMultiplier(price, factor);
c1a1af1920ce (svn r3034) -NewGRF: Improve error checking of setting price bases.
peter1138
parents: 2506
diff changeset
  1418
				} else {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  1419
					grfmsg(1, "GlobalVarChangeInfo: Price %d out of range, ignoring", price);
2508
c1a1af1920ce (svn r3034) -NewGRF: Improve error checking of setting price bases.
peter1138
parents: 2506
diff changeset
  1420
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1421
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1422
7658
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
  1423
			case 0x09: // Cargo translation table
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1424
				/* This is loaded during the initialisation stage, so just skip it here. */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1425
				/* Each entry is 4 bytes. */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1426
				buf += 4;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1427
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1428
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1429
			case 0x0A: { // Currency display names
4625
3e45c59b5d64 (svn r6485) -NewGRF Feature: Match the order of TTDPatch's currencies with those used in OTTD.
belugas
parents: 4602
diff changeset
  1430
				uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
3e45c59b5d64 (svn r6485) -NewGRF Feature: Match the order of TTDPatch's currencies with those used in OTTD.
belugas
parents: 4602
diff changeset
  1431
				StringID newone = GetGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1432
4504
3d20af4bd525 (svn r6289) -Fix(r6108) : case 0x48 (generic text) should not have been set over newstations.
belugas
parents: 4434
diff changeset
  1433
				if ((newone != STR_UNDEFINED) && (curidx < NUM_CURRENCY)) {
3d20af4bd525 (svn r6289) -Fix(r6108) : case 0x48 (generic text) should not have been set over newstations.
belugas
parents: 4434
diff changeset
  1434
					_currency_specs[curidx].name = newone;
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1435
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1436
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1437
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1438
			case 0x0B: { // Currency multipliers
4625
3e45c59b5d64 (svn r6485) -NewGRF Feature: Match the order of TTDPatch's currencies with those used in OTTD.
belugas
parents: 4602
diff changeset
  1439
				uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1440
				uint32 rate = grf_load_dword(&buf);
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1441
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1442
				if (curidx < NUM_CURRENCY) {
4602
36e779efee9a (svn r6454) -Fix(r6108) : Allow custom currency to display both prefix and suffix
belugas
parents: 4504
diff changeset
  1443
					/* TTDPatch uses a multiple of 1000 for its conversion calculations,
36e779efee9a (svn r6454) -Fix(r6108) : Allow custom currency to display both prefix and suffix
belugas
parents: 4504
diff changeset
  1444
					 * which OTTD does not. For this reason, divide grf value by 1000,
36e779efee9a (svn r6454) -Fix(r6108) : Allow custom currency to display both prefix and suffix
belugas
parents: 4504
diff changeset
  1445
					 * to be compatible */
36e779efee9a (svn r6454) -Fix(r6108) : Allow custom currency to display both prefix and suffix
belugas
parents: 4504
diff changeset
  1446
					_currency_specs[curidx].rate = rate / 1000;
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1447
				} else {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  1448
					grfmsg(1, "GlobalVarChangeInfo: Currency multipliers %d out of range, ignoring", curidx);
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1449
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1450
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1451
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1452
			case 0x0C: { // Currency options
4625
3e45c59b5d64 (svn r6485) -NewGRF Feature: Match the order of TTDPatch's currencies with those used in OTTD.
belugas
parents: 4602
diff changeset
  1453
				uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1454
				uint16 options = grf_load_word(&buf);
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1455
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1456
				if (curidx < NUM_CURRENCY) {
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1457
					_currency_specs[curidx].separator = GB(options, 0, 8);
4602
36e779efee9a (svn r6454) -Fix(r6108) : Allow custom currency to display both prefix and suffix
belugas
parents: 4504
diff changeset
  1458
					/* By specifying only one bit, we prevent errors,
36e779efee9a (svn r6454) -Fix(r6108) : Allow custom currency to display both prefix and suffix
belugas
parents: 4504
diff changeset
  1459
					 * since newgrf specs said that only 0 and 1 can be set for symbol_pos */
36e779efee9a (svn r6454) -Fix(r6108) : Allow custom currency to display both prefix and suffix
belugas
parents: 4504
diff changeset
  1460
					_currency_specs[curidx].symbol_pos = GB(options, 8, 1);
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1461
				} else {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  1462
					grfmsg(1, "GlobalVarChangeInfo: Currency option %d out of range, ignoring", curidx);
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1463
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1464
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1465
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1466
			case 0x0D: { // Currency prefix symbol
4625
3e45c59b5d64 (svn r6485) -NewGRF Feature: Match the order of TTDPatch's currencies with those used in OTTD.
belugas
parents: 4602
diff changeset
  1467
				uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1468
				uint32 tempfix = grf_load_dword(&buf);
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1469
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1470
				if (curidx < NUM_CURRENCY) {
7658
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
  1471
					memcpy(_currency_specs[curidx].prefix, &tempfix, 4);
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1472
					_currency_specs[curidx].prefix[4] = 0;
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1473
				} else {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  1474
					grfmsg(1, "GlobalVarChangeInfo: Currency symbol %d out of range, ignoring", curidx);
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1475
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1476
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1477
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1478
			case 0x0E: { // Currency suffix symbol
4625
3e45c59b5d64 (svn r6485) -NewGRF Feature: Match the order of TTDPatch's currencies with those used in OTTD.
belugas
parents: 4602
diff changeset
  1479
				uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1480
				uint32 tempfix = grf_load_dword(&buf);
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1481
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1482
				if (curidx < NUM_CURRENCY) {
6987
b0f13039bda2 (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6977
diff changeset
  1483
					memcpy(&_currency_specs[curidx].suffix, &tempfix, 4);
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1484
					_currency_specs[curidx].suffix[4] = 0;
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1485
				} else {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  1486
					grfmsg(1, "GlobalVarChangeInfo: Currency symbol %d out of range, ignoring", curidx);
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1487
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1488
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1489
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1490
			case 0x0F: { //  Euro introduction dates
4625
3e45c59b5d64 (svn r6485) -NewGRF Feature: Match the order of TTDPatch's currencies with those used in OTTD.
belugas
parents: 4602
diff changeset
  1491
				uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1492
				Year year_euro = grf_load_word(&buf);
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1493
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1494
				if (curidx < NUM_CURRENCY) {
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1495
					_currency_specs[curidx].to_euro = year_euro;
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1496
				} else {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  1497
					grfmsg(1, "GlobalVarChangeInfo: Euro intro date %d out of range, ignoring", curidx);
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  1498
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1499
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1500
7658
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
  1501
			case 0x10: // Snow line height table
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1502
				if (numinfo > 1 || IsSnowLineSet()) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1503
					grfmsg(1, "GlobalVarChangeInfo: The snowline can only be set once (%d)", numinfo);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1504
				} else if (len < SNOW_LINE_MONTHS * SNOW_LINE_DAYS) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1505
					grfmsg(1, "GlobalVarChangeInfo: Not enough entries set in the snowline table (%d)", len);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1506
				} else {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1507
					byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1508
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1509
					for (uint i = 0; i < SNOW_LINE_MONTHS; i++) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1510
						for (uint j = 0; j < SNOW_LINE_DAYS; j++) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1511
							table[i][j] = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1512
						}
6669
487ac09b95c4 (svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros
parents: 6668
diff changeset
  1513
					}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1514
					SetSnowLine(table);
6669
487ac09b95c4 (svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros
parents: 6668
diff changeset
  1515
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1516
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1517
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1518
			default:
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1519
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1520
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1521
		}
2506
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  1522
	}
3504
546b53897c01 (svn r4355) - NewGRF: Minor clean up; use the correct return type and remove extraneous brackets.
peter1138
parents: 3501
diff changeset
  1523
2506
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  1524
	*bufp = buf;
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  1525
	return ret;
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  1526
}
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  1527
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1528
static bool CargoChangeInfo(uint cid, int numinfo, int prop, byte **bufp, int len)
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1529
{
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1530
	byte *buf = *bufp;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1531
	bool ret = false;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1532
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1533
	if (cid + numinfo > NUM_CARGO) {
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1534
		grfmsg(2, "CargoChangeInfo: Cargo type %d out of range (max %d)", cid + numinfo, NUM_CARGO - 1);
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1535
		return false;
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1536
	}
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1537
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1538
	for (int i = 0; i < numinfo; i++) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1539
		CargoSpec *cs = &_cargo[cid + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1540
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1541
		switch (prop) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1542
			case 0x08: /* Bit number of cargo */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1543
				cs->bitnum = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1544
				cs->grfid = _cur_grffile->grfid;
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1545
				if (cs->IsValid()) {
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1546
					SETBIT(_cargo_mask, cid + i);
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1547
				} else {
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1548
					CLRBIT(_cargo_mask, cid + i);
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1549
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1550
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1551
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1552
			case 0x09: /* String ID for cargo type name */
7783
467bf38f954f (svn r10628) -Fix (r10606,FS#1055): Revert r10606 and fix the plural problem another way.
peter1138
parents: 7772
diff changeset
  1553
				cs->name = grf_load_word(&buf);
7772
82b58fd5897c (svn r10606) -Fix (r8826): plural and single cargo names were mixed up.
peter1138
parents: 7736
diff changeset
  1554
				break;
82b58fd5897c (svn r10606) -Fix (r8826): plural and single cargo names were mixed up.
peter1138
parents: 7736
diff changeset
  1555
82b58fd5897c (svn r10606) -Fix (r8826): plural and single cargo names were mixed up.
peter1138
parents: 7736
diff changeset
  1556
			case 0x0A: /* String for 1 unit of cargo */
7783
467bf38f954f (svn r10628) -Fix (r10606,FS#1055): Revert r10606 and fix the plural problem another way.
peter1138
parents: 7772
diff changeset
  1557
				cs->name_single = grf_load_word(&buf);
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1558
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1559
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1560
			case 0x0B:
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1561
				/* String for units of cargo. This is different in OpenTTD to TTDPatch
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1562
				 * (e.g. 10 tonnes of coal) */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1563
				cs->units_volume = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1564
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1565
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1566
			case 0x0C: /* String for quantity of cargo (e.g. 10 tonnes of coal) */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1567
				cs->quantifier = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1568
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1569
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1570
			case 0x0D: /* String for two letter cargo abbreviation */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1571
				cs->abbrev = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1572
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1573
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1574
			case 0x0E: /* Sprite ID for cargo icon */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1575
				cs->sprite = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1576
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1577
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1578
			case 0x0F: /* Weight of one unit of cargo */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1579
				cs->weight = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1580
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1581
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1582
			case 0x10: /* Used for payment calculation */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1583
				cs->transit_days[0] = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1584
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1585
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1586
			case 0x11: /* Used for payment calculation */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1587
				cs->transit_days[1] = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1588
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1589
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1590
			case 0x12: /* Base cargo price */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1591
				cs->initial_payment = grf_load_dword(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1592
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1593
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1594
			case 0x13: /* Colour for station rating bars */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1595
				cs->rating_colour = MapDOSColour(grf_load_byte(&buf));
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1596
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1597
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1598
			case 0x14: /* Colour for cargo graph */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1599
				cs->legend_colour = MapDOSColour(grf_load_byte(&buf));
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1600
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1601
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1602
			case 0x15: /* Freight status */
7658
742319a52186 (svn r10436) -Cleanup: Doxygenise some comments, update others, and make a few statements more consistent with everything else.
maedhros
parents: 7657
diff changeset
  1603
				cs->is_freight = (grf_load_byte(&buf) != 0);
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1604
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1605
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1606
			case 0x16: /* Cargo classes */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1607
				cs->classes = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1608
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1609
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1610
			case 0x17: /* Cargo label */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1611
				cs->label = grf_load_dword(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1612
				cs->label = BSWAP32(cs->label);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1613
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1614
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1615
			case 0x18: { /* Town growth substitute type */
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1616
				uint8 substitute_type = grf_load_byte(&buf);
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1617
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1618
				switch (substitute_type) {
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1619
					case 0x00: cs->town_effect = TE_PASSENGERS; break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1620
					case 0x02: cs->town_effect = TE_MAIL; break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1621
					case 0x05: cs->town_effect = TE_GOODS; break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1622
					case 0x09: cs->town_effect = TE_WATER; break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1623
					case 0x0B: cs->town_effect = TE_FOOD; break;
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1624
					default:
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1625
						grfmsg(1, "CargoChangeInfo: Unknown town growth substitute value %d, setting to none.", substitute_type);
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1626
					case 0xFF: cs->town_effect = TE_NONE; break;
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1627
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1628
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1629
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1630
			case 0x19: /* Town growth coefficient */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1631
				cs->multipliertowngrowth = grf_load_word(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1632
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1633
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1634
			case 0x1A: /* Bitmask of callbacks to use */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1635
				cs->callback_mask = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1636
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1637
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1638
			default:
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1639
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1640
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1641
		}
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1642
	}
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1643
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1644
	*bufp = buf;
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1645
	return ret;
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1646
}
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1647
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  1648
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1649
static bool SoundEffectChangeInfo(uint sid, int numinfo, int prop, byte **bufp, int len)
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1650
{
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1651
	byte *buf = *bufp;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1652
	bool ret = false;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1653
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1654
	if (_cur_grffile->sound_offset == 0) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  1655
		grfmsg(1, "SoundEffectChangeInfo: No effects defined, skipping");
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1656
		return false;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1657
	}
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1658
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1659
	for (int i = 0; i < numinfo; i++) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1660
		uint sound = sid + i + _cur_grffile->sound_offset - GetNumOriginalSounds();
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1661
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1662
		if (sound >= GetNumSounds()) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1663
			grfmsg(1, "SoundEffectChangeInfo: Sound %d not defined (max %d)", sound, GetNumSounds());
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1664
			continue;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1665
		}
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1666
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1667
		switch (prop) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1668
			case 0x08: // Relative volume
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1669
				GetSound(sound)->volume = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1670
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1671
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1672
			case 0x09: // Priority
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1673
				GetSound(sound)->priority = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1674
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1675
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1676
			case 0x0A: { // Override old sound
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1677
				uint orig_sound = grf_load_byte(&buf);
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1678
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1679
				if (orig_sound >= GetNumSounds()) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1680
					grfmsg(1, "SoundEffectChangeInfo: Original sound %d not defined (max %d)", orig_sound, GetNumSounds());
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1681
				} else {
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1682
					FileEntry *newfe = GetSound(sound);
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1683
					FileEntry *oldfe = GetSound(orig_sound);
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1684
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1685
					/* Literally copy the data of the new sound over the original */
5024
f13f2f2d43f9 (svn r7065) Use simple assignment instead of memcpy()
tron
parents: 5011
diff changeset
  1686
					*oldfe = *newfe;
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1687
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1688
			} break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1689
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1690
			default:
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1691
				ret = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1692
				break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  1693
		}
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1694
	}
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1695
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1696
	*bufp = buf;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1697
	return ret;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1698
}
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  1699
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1700
static bool IndustrytilesChangeInfo(uint indtid, int numinfo, int prop, byte **bufp, int len)
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1701
{
7736
1119c5e38774 (svn r10521) -Fix: some NewGRFs did not check whether the newindustries bit was set, which breaks with a not-yet-finished-implementation of newindustries.
rubidium
parents: 7729
diff changeset
  1702
	if (!HASBIT(_ttdpatch_flags[3], 0x07)) return true;
1119c5e38774 (svn r10521) -Fix: some NewGRFs did not check whether the newindustries bit was set, which breaks with a not-yet-finished-implementation of newindustries.
rubidium
parents: 7729
diff changeset
  1703
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1704
	byte *buf = *bufp;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1705
	bool ret = false;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1706
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1707
	if (indtid + numinfo > NUM_INDUSTRYTILES) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1708
		grfmsg(1, "IndustryTilesChangeInfo: Too many industry tiles loaded (%u), max (%u). Ignoring.", indtid + numinfo, NUM_INDUSTRYTILES);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1709
		return false;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1710
	}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1711
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1712
	/* Allocate industry tile specs if they haven't been allocated already. */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1713
	if (_cur_grffile->indtspec == NULL) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1714
		_cur_grffile->indtspec = CallocT<IndustryTileSpec*>(NUM_INDUSTRYTILES);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1715
	}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1716
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1717
	for (int i = 0; i < numinfo; i++) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1718
		IndustryTileSpec *tsp = _cur_grffile->indtspec[indtid + i];
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1719
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1720
		if (prop != 0x08 && tsp == NULL) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1721
			grfmsg(2, "IndustryTilesChangeInfo: Attempt to modify undefined industry tile %u. Ignoring.", indtid + i);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1722
			continue;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1723
		}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1724
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1725
		switch (prop) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1726
			case 0x08: { // Substitute industry tile type
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1727
				IndustryTileSpec **tilespec = &_cur_grffile->indtspec[indtid + i];
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1728
				byte subs_id = grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1729
7955
7a2abd093498 (svn r10955) -Fix: The substitute prop (0x08) of industry tiles does not behave as prop 0x08 of industry. Therefore, do not disable the old industry with value of 0xFF. Not a bug fix, just a spec compliance correction...
belugas
parents: 7927
diff changeset
  1730
				if (subs_id >= NEW_INDUSTRYTILEOFFSET) {
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1731
					/* The substitute id must be one of the original industry tile. */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1732
					grfmsg(2, "IndustryTilesChangeInfo: Attempt to use new industry tile %u as substitute industry tile for %u. Ignoring.", subs_id, indtid + i);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1733
					return false;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1734
				}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1735
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1736
				/* Allocate space for this industry. */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1737
				if (*tilespec == NULL) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1738
					int tempid;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1739
					*tilespec = CallocT<IndustryTileSpec>(1);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1740
					tsp = *tilespec;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1741
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1742
					memcpy(tsp, &_industry_tile_specs[subs_id], sizeof(_industry_tile_specs[subs_id]));
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1743
					tsp->enabled = true;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1744
					tsp->grf_prop.local_id = indtid + i;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1745
					tsp->grf_prop.subst_id = subs_id;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1746
					tsp->grf_prop.grffile = _cur_grffile;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1747
					tempid = _industile_mngr.AddEntityID(indtid + i, _cur_grffile->grfid, subs_id); // pre-reserve the tile slot
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1748
				}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1749
			} break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1750
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1751
			case 0x09: { // Industry tile override
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1752
				byte ovrid = grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1753
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1754
				/* The industry being overridden must be an original industry. */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1755
				if (ovrid >= NEW_INDUSTRYTILEOFFSET) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1756
					grfmsg(2, "IndustryTilesChangeInfo: Attempt to override new industry tile %u with industry tile id %u. Ignoring.", ovrid, indtid + i);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1757
					return false;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1758
				}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1759
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1760
				tsp->grf_prop.override = ovrid;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1761
				_industile_mngr.Add(indtid + i, ovrid);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1762
			} break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1763
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1764
			case 0x0A: // Tile acceptance
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1765
			case 0x0B:
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1766
			case 0x0C: {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1767
				uint16 acctp = grf_load_word(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1768
				tsp->accepts_cargo[prop - 0x0A] = GetCargoTranslation(GB(acctp, 0, 8), _cur_grffile);
8127
0cbf1d4a5f6d (svn r11162) -Fix: Acceptance is not a cargo, but rather a level of... acceptance :) So don't need to get cargo name out of it (glx)
belugas
parents: 8126
diff changeset
  1769
				tsp->acceptance[prop - 0x0A] = GB(acctp, 8, 8);
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1770
			} break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1771
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1772
			case 0x0D: // Land shape flags
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1773
				tsp->slopes_refused = (Slope)grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1774
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1775
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1776
			case 0x0E: // Callback flags
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1777
				tsp->callback_flags = grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1778
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1779
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1780
			case 0x0F: // Animation information
7725
e3892b38aa14 (svn r10508) -Codechange: allow customizable animation schemes for industries.
rubidium
parents: 7713
diff changeset
  1781
				tsp->animation_info = grf_load_word(&buf);
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1782
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1783
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1784
			case 0x10: // Animation speed
7725
e3892b38aa14 (svn r10508) -Codechange: allow customizable animation schemes for industries.
rubidium
parents: 7713
diff changeset
  1785
				tsp->animation_speed = grf_load_byte(&buf);
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1786
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1787
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1788
			case 0x11: // Triggers for callback 25
7725
e3892b38aa14 (svn r10508) -Codechange: allow customizable animation schemes for industries.
rubidium
parents: 7713
diff changeset
  1789
				tsp->animation_triggers = grf_load_byte(&buf);
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1790
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1791
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1792
			case 0x12: // Special flags
7725
e3892b38aa14 (svn r10508) -Codechange: allow customizable animation schemes for industries.
rubidium
parents: 7713
diff changeset
  1793
				tsp->animation_special_flags = grf_load_byte(&buf);
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1794
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1795
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1796
			default:
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1797
				ret = true;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1798
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1799
		}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1800
	}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1801
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1802
	*bufp = buf;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1803
	return ret;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1804
}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1805
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1806
static bool IndustriesChangeInfo(uint indid, int numinfo, int prop, byte **bufp, int len)
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1807
{
7736
1119c5e38774 (svn r10521) -Fix: some NewGRFs did not check whether the newindustries bit was set, which breaks with a not-yet-finished-implementation of newindustries.
rubidium
parents: 7729
diff changeset
  1808
	if (!HASBIT(_ttdpatch_flags[3], 0x07)) return true;
1119c5e38774 (svn r10521) -Fix: some NewGRFs did not check whether the newindustries bit was set, which breaks with a not-yet-finished-implementation of newindustries.
rubidium
parents: 7729
diff changeset
  1809
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1810
	byte *buf = *bufp;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1811
	bool ret = false;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1812
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1813
	if (indid + numinfo > NUM_INDUSTRYTYPES) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1814
		grfmsg(1, "IndustriesChangeInfo: Too many industries loaded (%u), max (%u). Ignoring.", indid + numinfo, NUM_INDUSTRYTYPES);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1815
		return false;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1816
	}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1817
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1818
	grfmsg(1, "IndustriesChangeInfo: newid %u", indid);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1819
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1820
	/* Allocate industry specs if they haven't been allocated already. */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1821
	if (_cur_grffile->industryspec == NULL) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1822
		_cur_grffile->industryspec = CallocT<IndustrySpec*>(NUM_INDUSTRYTYPES);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1823
	}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1824
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1825
	for (int i = 0; i < numinfo; i++) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1826
		IndustrySpec *indsp = _cur_grffile->industryspec[indid + i];
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1827
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1828
		if (prop != 0x08 && indsp == NULL) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1829
			grfmsg(2, "IndustriesChangeInfo: Attempt to modify undefined industry %u. Ignoring.", indid + i);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1830
			continue;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1831
		}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1832
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1833
		switch (prop) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1834
			case 0x08: { // Substitute industry type
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1835
				IndustrySpec **indspec = &_cur_grffile->industryspec[indid + i];
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1836
				byte subs_id = grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1837
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1838
				if (subs_id == 0xFF) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1839
					/* Instead of defining a new industry, a substitute industry id
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1840
					 * of 0xFF disables the old industry with the current id. */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1841
					_industry_specs[indid + i].enabled = false;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1842
					continue;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1843
				} else if (subs_id >= NEW_INDUSTRYOFFSET) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1844
					/* The substitute id must be one of the original industry. */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1845
					grfmsg(2, "_industry_specs: Attempt to use new industry %u as substitute industry for %u. Ignoring.", subs_id, indid + i);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1846
					return false;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1847
				}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1848
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1849
				/* Allocate space for this industry.
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1850
				 * Only need to do it once. If ever it is called again, it should not
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1851
				 * do anything */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1852
				if (*indspec == NULL) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1853
					*indspec = CallocT<IndustrySpec>(1);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1854
					indsp = *indspec;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1855
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1856
					memcpy(indsp, &_origin_industry_specs[subs_id], sizeof(_industry_specs[subs_id]));
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1857
					indsp->enabled = true;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1858
					indsp->grf_prop.local_id = indid + i;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1859
					indsp->grf_prop.subst_id = subs_id;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1860
					indsp->grf_prop.grffile = _cur_grffile;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1861
				}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1862
			} break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1863
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1864
			case 0x09: { // Industry type override
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1865
				byte ovrid = grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1866
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1867
				/* The industry being overridden must be an original industry. */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1868
				if (ovrid >= NEW_INDUSTRYOFFSET) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1869
					grfmsg(2, "IndustriesChangeInfo: Attempt to override new industry %u with industry id %u. Ignoring.", ovrid, indid + i);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1870
					return false;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1871
				}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1872
				indsp->grf_prop.override = ovrid;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1873
				_industry_mngr.Add(indid + i, ovrid);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1874
			} break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1875
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1876
			case 0x0A: { // Set industry layout(s)
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1877
				indsp->num_table = grf_load_byte(&buf); // Number of layaouts
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1878
				uint32 defsize = grf_load_dword(&buf);  // Total size of the definition
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1879
				IndustryTileTable **tile_table = CallocT<IndustryTileTable*>(indsp->num_table); // Table with tiles to compose an industry
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1880
				IndustryTileTable *itt = CallocT<IndustryTileTable>(defsize); // Temporary array to read the tile layouts from the GRF
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1881
				int size;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1882
				IndustryTileTable *copy_from;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1883
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1884
				for (byte j = 0; j < indsp->num_table; j++) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1885
					for (int k = 0;; k++) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1886
						itt[k].ti.x = grf_load_byte(&buf); // Offsets from northermost tile
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1887
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1888
						if (itt[k].ti.x == 0xFE && k == 0) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1889
							/* This means we have to borrow the layout from an old industry */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1890
							IndustryType type = grf_load_byte(&buf);  //industry holding required layout
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1891
							byte laynbr = grf_load_byte(&buf);        //layout number to borrow
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1892
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1893
							copy_from = (IndustryTileTable*)_origin_industry_specs[type].table[laynbr];
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1894
							for (size = 1;; size++) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1895
								if (_origin_industry_specs[type].table[laynbr + (size - 1)]->ti.x == -0x80 &&
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1896
										_origin_industry_specs[type].table[laynbr + (size - 1)]->ti.y == 0) break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1897
							}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1898
							break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1899
						}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1900
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1901
						itt[k].ti.y = grf_load_byte(&buf); // Or table definition finalisation
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1902
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1903
						if (itt[k].ti.x == 0 && itt[k].ti.y == 0x80) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1904
							/*  Not the same terminator.  The one we are using is rather
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1905
							 x= -80, y = x .  So, adjust it. */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1906
							itt[k].ti.x = -0x80;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1907
							itt[k].ti.y =  0;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1908
							itt[k].gfx  =  0;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1909
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1910
							size = k + 1;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1911
							copy_from = itt;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1912
							break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1913
						}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1914
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1915
						itt[k].gfx = grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1916
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1917
						if (itt[k].gfx == 0xFE) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1918
							/* Use a new tile from this GRF */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1919
							int local_tile_id = grf_load_word(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1920
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1921
							/* Read the ID from the _industile_mngr. */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1922
							int tempid = _industile_mngr.GetID(local_tile_id, _cur_grffile->grfid);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1923
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1924
							if (tempid == INVALID_INDUSTRYTILE) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1925
								grfmsg(2, "IndustriesChangeInfo: Attempt to use industry tile %u with industry id %u, not yet defined. Ignoring.", local_tile_id, indid);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1926
							} else {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1927
								/* Declared as been valid, can be used */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1928
								itt[k].gfx = tempid;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1929
								size = k + 1;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1930
								copy_from = itt;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1931
							}
8126
ff006fa6d1ab (svn r11161) -Fix: Allow to transform coordinates in negative ones when gfx of 0xFF allows it
belugas
parents: 8116
diff changeset
  1932
						} else if (itt[k].gfx == 0xFF) {
ff006fa6d1ab (svn r11161) -Fix: Allow to transform coordinates in negative ones when gfx of 0xFF allows it
belugas
parents: 8116
diff changeset
  1933
							itt[k].ti.x = (int8)GB(itt[k].ti.x, 0, 8);
ff006fa6d1ab (svn r11161) -Fix: Allow to transform coordinates in negative ones when gfx of 0xFF allows it
belugas
parents: 8116
diff changeset
  1934
							itt[k].ti.y = (int8)GB(itt[k].ti.y, 0, 8);
8129
7d673f9710c2 (svn r11164) -Fix(r11161): a rogue space roaming in the night... removed
belugas
parents: 8127
diff changeset
  1935
						}
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1936
					}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1937
					tile_table[j] = CallocT<IndustryTileTable>(size);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1938
					memcpy(tile_table[j], copy_from, sizeof(*copy_from) * size);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1939
				}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1940
				/* Install final layout construction in the industry spec */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1941
				indsp->table = tile_table;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1942
				SETBIT(indsp->cleanup_flag, 1);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1943
				free(itt);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1944
			} break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1945
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1946
			case 0x0B: // Industry production flags
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1947
				indsp->life_type = (IndustryLifeType)grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1948
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1949
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1950
			case 0x0C: // Industry closure message
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1951
				indsp->closure_text = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1952
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1953
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1954
			case 0x0D: // Production increase message
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1955
				indsp->production_up_text = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1956
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1957
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1958
			case 0x0E: // Production decrease message
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1959
				indsp->production_down_text = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1960
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1961
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1962
			case 0x0F: // Fund cost multiplier
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1963
				indsp->cost_multiplier = grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1964
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1965
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1966
			case 0x10: // Production cargo types
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1967
				for (byte j = 0; j < 2; j++) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1968
					indsp->produced_cargo[j] = GetCargoTranslation(grf_load_byte(&buf), _cur_grffile);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1969
				}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1970
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1971
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1972
			case 0x11: // Acceptance cargo types
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1973
				for (byte j = 0; j < 3; j++) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1974
					indsp->accepts_cargo[j] = GetCargoTranslation(grf_load_byte(&buf), _cur_grffile);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1975
				}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1976
				grf_load_byte(&buf); // Unnused, eat it up
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1977
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1978
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1979
			case 0x12: // Production multipliers
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1980
			case 0x13:
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1981
				indsp->production_rate[prop - 0x12] = grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1982
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1983
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1984
			case 0x14: // Minimal amount of cargo distributed
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1985
				indsp->minimal_cargo = grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1986
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1987
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1988
			case 0x15: { // Random sound effects
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1989
				indsp->number_of_sounds = grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1990
				uint8 *sounds = MallocT<uint8>(indsp->number_of_sounds);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1991
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1992
				for (uint8 j = 0; j < indsp->number_of_sounds; j++) sounds[j] = grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1993
				indsp->random_sounds = sounds;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1994
				SETBIT(indsp->cleanup_flag, 0);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1995
			} break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1996
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1997
			case 0x16: // Conflicting industry types
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1998
				for (byte j = 0; j < 3; j++) indsp->conflicting[j] = grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  1999
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2000
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2001
			case 0x17: // Probability in random game
8160
2a2e46b8fba2 (svn r11195) -Fix: creation chances for industries during gameplay and during map generation were swapped.
rubidium
parents: 8157
diff changeset
  2002
				indsp->appear_creation[_opt.landscape] = grf_load_byte(&buf);
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2003
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2004
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2005
			case 0x18: // Probability during gameplay
8160
2a2e46b8fba2 (svn r11195) -Fix: creation chances for industries during gameplay and during map generation were swapped.
rubidium
parents: 8157
diff changeset
  2006
				indsp->appear_ingame[_opt.landscape] = grf_load_byte(&buf);
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2007
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2008
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2009
			case 0x19: // Map color
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2010
				indsp->map_colour = MapDOSColour(grf_load_byte(&buf));
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2011
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2012
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2013
			case 0x1A: // Special industry flags to define special behavior
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2014
				indsp->behaviour = (IndustyBehaviour)grf_load_dword(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2015
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2016
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2017
			case 0x1B: // New industry text ID
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2018
				indsp->new_industry_text = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2019
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2020
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2021
			case 0x1C: // Input cargo multipliers for the three input cargo types
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2022
			case 0x1D:
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2023
			case 0x1E: {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2024
					uint32 multiples = grf_load_dword(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2025
					indsp->input_cargo_multiplier[prop - 0x1C][0] = GB(multiples, 0,15);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2026
					indsp->input_cargo_multiplier[prop - 0x1C][1] = GB(multiples, 15,15);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2027
				} break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2028
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2029
			case 0x1F: // Industry name
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2030
				indsp->name = MapGRFStringID(_cur_grffile->grfid, grf_load_word(&buf));
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2031
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2032
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2033
			case 0x20: // Prospecting success chance
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2034
				indsp->prospecting_chance = grf_load_dword(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2035
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2036
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2037
			case 0x21:   // Callback flags
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2038
			case 0x22: { // Callback additional flags
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2039
				byte aflag = grf_load_byte(&buf);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2040
				SB(indsp->callback_flags, (prop - 0x21) * 8, 8, aflag);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2041
			} break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2042
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2043
			default:
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2044
				ret = true;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2045
				break;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2046
		}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2047
	}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2048
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2049
	*bufp = buf;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2050
	return ret;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2051
}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2052
356
e3721e481b38 (svn r544) -newgrf: codechange for better handling (pasky and octo__)
celestar
parents: 193
diff changeset
  2053
/* Action 0x00 */
3879
3e9cd6403d73 (svn r4928) CodeChange : Rename functions referring to "Vehicle" for "Feature".
belugas
parents: 3875
diff changeset
  2054
static void FeatureChangeInfo(byte *buf, int len)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2055
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2056
	byte *bufend = buf + len;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2057
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2058
	/* <00> <feature> <num-props> <num-info> <id> (<property <new-info>)...
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2059
	 *
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2060
	 * B feature       0, 1, 2 or 3 for trains, road vehicles, ships or planes
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2061
	 *                 4 for defining new train station sets
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2062
	 * B num-props     how many properties to change per vehicle/station
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2063
	 * B num-info      how many vehicles/stations to change
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2064
	 * B id            ID of first vehicle/station to change, if num-info is
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2065
	 *                 greater than one, this one and the following
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2066
	 *                 vehicles/stations will be changed
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2067
	 * B property      what property to change, depends on the feature
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2068
	 * V new-info      new bytes of info (variable size; depends on properties) */
391
573193308396 (svn r583) -newgrf: Hopefully prevent GRF files introducing new bridges or townhouses to crash the game (pasky).
darkvater
parents: 389
diff changeset
  2069
	/* TODO: Bridges, town houses. */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2070
2438
eaef2b29fa3d (svn r2964) Fix: newgrf: Include missing grf feature canal.
peter1138
parents: 2421
diff changeset
  2071
	static const VCI_Handler handler[] = {
3825
c4c69a0ca625 (svn r4838) Newgrf : Add empty base for newcargos
belugas
parents: 3821
diff changeset
  2072
		/* GSF_TRAIN */        RailVehicleChangeInfo,
c4c69a0ca625 (svn r4838) Newgrf : Add empty base for newcargos
belugas
parents: 3821
diff changeset
  2073
		/* GSF_ROAD */         RoadVehicleChangeInfo,
c4c69a0ca625 (svn r4838) Newgrf : Add empty base for newcargos
belugas
parents: 3821
diff changeset
  2074
		/* GSF_SHIP */         ShipVehicleChangeInfo,
c4c69a0ca625 (svn r4838) Newgrf : Add empty base for newcargos
belugas
parents: 3821
diff changeset
  2075
		/* GSF_AIRCRAFT */     AircraftVehicleChangeInfo,
c4c69a0ca625 (svn r4838) Newgrf : Add empty base for newcargos
belugas
parents: 3821
diff changeset
  2076
		/* GSF_STATION */      StationChangeInfo,
c4c69a0ca625 (svn r4838) Newgrf : Add empty base for newcargos
belugas
parents: 3821
diff changeset
  2077
		/* GSF_CANAL */        NULL,
c4c69a0ca625 (svn r4838) Newgrf : Add empty base for newcargos
belugas
parents: 3821
diff changeset
  2078
		/* GSF_BRIDGE */       BridgeChangeInfo,
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2079
		/* GSF_TOWNHOUSE */    TownHouseChangeInfo,
3825
c4c69a0ca625 (svn r4838) Newgrf : Add empty base for newcargos
belugas
parents: 3821
diff changeset
  2080
		/* GSF_GLOBALVAR */    GlobalVarChangeInfo,
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2081
		/* GSF_INDUSTRYTILES */IndustrytilesChangeInfo,
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2082
		/* GSF_INDUSTRIES */   IndustriesChangeInfo,
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2083
		/* GSF_CARGOS */       NULL, /* Cargo is handled during reservation */
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  2084
		/* GSF_SOUNDFX */      SoundEffectChangeInfo,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2085
	};
360
ff657281ae48 (svn r548) -newgrf: minor style changes, and application of boolean type
darkvater
parents: 359
diff changeset
  2086
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  2087
	if (!check_length(len, 6, "FeatureChangeInfo")) return;
3714
402f02b01241 (svn r4657) - NewGRF: use grf_load_byte() in favour of array accesses
peter1138
parents: 3712
diff changeset
  2088
	buf++;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2089
	uint8 feature  = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2090
	uint8 numprops = grf_load_byte(&buf);
6614
b41f2210a494 (svn r9108) -Fix(9093) : MSVC was a bit unhappy with some of the type changes. So basically, widening the types makes the difference
belugas
parents: 6610
diff changeset
  2091
	uint numinfo  = grf_load_byte(&buf);
b41f2210a494 (svn r9108) -Fix(9093) : MSVC was a bit unhappy with some of the type changes. So basically, widening the types makes the difference
belugas
parents: 6610
diff changeset
  2092
	uint engine   = grf_load_byte(&buf);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 74
diff changeset
  2093
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  2094
	grfmsg(6, "FeatureChangeInfo: feature %d, %d properties, to apply to %d+%d",
378
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
  2095
	               feature, numprops, engine, numinfo);
9f170b63d48e (svn r567) -newgrf: Support for road vehicles customization (seems to work at
celestar
parents: 373
diff changeset
  2096
2440
443e2f3cce75 (svn r2966) Fix: newgrf: Replace special case with a check for the existence of a handler in VehicleChangeInfo.
peter1138
parents: 2439
diff changeset
  2097
	if (feature >= lengthof(handler) || handler[feature] == NULL) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  2098
		grfmsg(1, "FeatureChangeInfo: Unsupported feature %d, skipping", feature);
391
573193308396 (svn r583) -newgrf: Hopefully prevent GRF files introducing new bridges or townhouses to crash the game (pasky).
darkvater
parents: 389
diff changeset
  2099
		return;
573193308396 (svn r583) -newgrf: Hopefully prevent GRF files introducing new bridges or townhouses to crash the game (pasky).
darkvater
parents: 389
diff changeset
  2100
	}
573193308396 (svn r583) -newgrf: Hopefully prevent GRF files introducing new bridges or townhouses to crash the game (pasky).
darkvater
parents: 389
diff changeset
  2101
2439
c820a9751afc (svn r2965) Fix: newgrf: Add bounds checking to VehicleChangeInfo for vehicles and change
peter1138
parents: 2438
diff changeset
  2102
	if (feature <= GSF_AIRCRAFT) {
c820a9751afc (svn r2965) Fix: newgrf: Add bounds checking to VehicleChangeInfo for vehicles and change
peter1138
parents: 2438
diff changeset
  2103
		if (engine + numinfo > _vehcounts[feature]) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  2104
			grfmsg(0, "FeatureChangeInfo: Last engine ID %d out of bounds (max %d), skipping", engine + numinfo, _vehcounts[feature]);
2439
c820a9751afc (svn r2965) Fix: newgrf: Add bounds checking to VehicleChangeInfo for vehicles and change
peter1138
parents: 2438
diff changeset
  2105
			return;
c820a9751afc (svn r2965) Fix: newgrf: Add bounds checking to VehicleChangeInfo for vehicles and change
peter1138
parents: 2438
diff changeset
  2106
		}
c820a9751afc (svn r2965) Fix: newgrf: Add bounds checking to VehicleChangeInfo for vehicles and change
peter1138
parents: 2438
diff changeset
  2107
	}
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2108
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2109
	while (numprops-- && buf < bufend) {
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2110
		uint8 prop = grf_load_byte(&buf);
2421
7b6750d797bd (svn r2947) Reorder some code to prepare for future enhancements and get rid of some gotos (peter1138)
tron
parents: 2400
diff changeset
  2111
		bool ignoring = false;
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2112
2421
7b6750d797bd (svn r2947) Reorder some code to prepare for future enhancements and get rid of some gotos (peter1138)
tron
parents: 2400
diff changeset
  2113
		switch (feature) {
7b6750d797bd (svn r2947) Reorder some code to prepare for future enhancements and get rid of some gotos (peter1138)
tron
parents: 2400
diff changeset
  2114
			case GSF_TRAIN:
7b6750d797bd (svn r2947) Reorder some code to prepare for future enhancements and get rid of some gotos (peter1138)
tron
parents: 2400
diff changeset
  2115
			case GSF_ROAD:
7b6750d797bd (svn r2947) Reorder some code to prepare for future enhancements and get rid of some gotos (peter1138)
tron
parents: 2400
diff changeset
  2116
			case GSF_SHIP:
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2117
			case GSF_AIRCRAFT: {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2118
				bool handled = true;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2119
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2120
				for (uint i = 0; i < numinfo; i++) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2121
					EngineInfo *ei = &_engine_info[engine + _vehshifts[feature] + i];
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2122
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2123
					/* Common properties for vehicles */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2124
					switch (prop) {
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2125
						case 0x00: // Introduction date
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2126
							ei->base_intro = grf_load_word(&buf) + DAYS_TILL_ORIGINAL_BASE_YEAR;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2127
							break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2128
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2129
						case 0x02: // Decay speed
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2130
							SB(ei->unk2, 0, 7, grf_load_byte(&buf) & 0x7F);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2131
							break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2132
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2133
						case 0x03: // Vehicle life
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2134
							ei->lifelength = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2135
							break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2136
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2137
						case 0x04: // Model life
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2138
							ei->base_life = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2139
							break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2140
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2141
						case 0x06: // Climates available
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2142
							ei->climates = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2143
							break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2144
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2145
						case 0x07: // Loading speed
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2146
							/* Hyronymus explained me what does
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2147
							 * this mean and insists on having a
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2148
							 * credit ;-). --pasky */
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2149
							ei->load_amount = grf_load_byte(&buf);
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2150
							break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2151
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2152
						default:
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2153
							handled = false;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2154
							break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2155
					}
2421
7b6750d797bd (svn r2947) Reorder some code to prepare for future enhancements and get rid of some gotos (peter1138)
tron
parents: 2400
diff changeset
  2156
				}
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2157
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2158
				if (handled) break;
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2159
			} /* FALL THROUGH */
2421
7b6750d797bd (svn r2947) Reorder some code to prepare for future enhancements and get rid of some gotos (peter1138)
tron
parents: 2400
diff changeset
  2160
7b6750d797bd (svn r2947) Reorder some code to prepare for future enhancements and get rid of some gotos (peter1138)
tron
parents: 2400
diff changeset
  2161
			default:
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2162
				if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) {
2421
7b6750d797bd (svn r2947) Reorder some code to prepare for future enhancements and get rid of some gotos (peter1138)
tron
parents: 2400
diff changeset
  2163
					ignoring = true;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2164
				}
2421
7b6750d797bd (svn r2947) Reorder some code to prepare for future enhancements and get rid of some gotos (peter1138)
tron
parents: 2400
diff changeset
  2165
				break;
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2166
		}
2421
7b6750d797bd (svn r2947) Reorder some code to prepare for future enhancements and get rid of some gotos (peter1138)
tron
parents: 2400
diff changeset
  2167
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  2168
		if (ignoring) grfmsg(2, "FeatureChangeInfo: Ignoring property 0x%02X (not implemented)", prop);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2169
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2170
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2171
5776
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2172
/* Action 0x00 (GLS_SAFETYSCAN) */
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2173
static void SafeChangeInfo(byte *buf, int len)
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2174
{
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  2175
	if (!check_length(len, 6, "SafeChangeInfo")) return;
5776
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2176
	buf++;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2177
	uint8 feature  = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2178
	uint8 numprops = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2179
	grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2180
	grf_load_byte(&buf);
5776
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2181
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2182
	if (feature == GSF_BRIDGE && numprops == 1) {
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2183
		uint8 prop = grf_load_byte(&buf);
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2184
		/* Bridge property 0x0D is redefinition of sprite layout tables, which
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2185
		 * is considered safe. */
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2186
		if (prop == 0x0D) return;
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2187
	}
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2188
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2189
	SETBIT(_cur_grfconfig->flags, GCF_UNSAFE);
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2190
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2191
	/* Skip remainder of GRF */
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2192
	_skip_sprites = -1;
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2193
}
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  2194
6469
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2195
/* Action 0x00 (GLS_INIT) */
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2196
static void InitChangeInfo(byte *buf, int len)
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2197
{
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2198
	byte *bufend = buf + len;
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2199
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2200
	if (!check_length(len, 6, "InitChangeInfo")) return;
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2201
	buf++;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2202
	uint8 feature  = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2203
	uint8 numprops = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2204
	uint8 numinfo  = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2205
	uint8 index    = grf_load_byte(&buf);
6469
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2206
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2207
	while (numprops-- && buf < bufend) {
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2208
		uint8 prop = grf_load_byte(&buf);
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2209
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2210
		switch (feature) {
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2211
			case GSF_GLOBALVAR:
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2212
				switch (prop) {
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  2213
					case 0x09: // Cargo Translation Table
6469
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2214
						if (index != 0) {
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2215
							grfmsg(1, "InitChangeInfo: Cargo translation table must start at zero");
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2216
							return;
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2217
						}
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2218
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2219
						free(_cur_grffile->cargo_list);
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2220
						_cur_grffile->cargo_max = numinfo;
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2221
						_cur_grffile->cargo_list = MallocT<CargoLabel>(numinfo);
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2222
7655
8d1e8833ce28 (svn r10433) -Codechange: Remove FOR_EACH_OBJECT by moving the for loops in the Action 0
maedhros
parents: 7530
diff changeset
  2223
						for (uint i = 0; i < numinfo; i++) {
6469
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2224
							CargoLabel cl = grf_load_dword(&buf);
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2225
							_cur_grffile->cargo_list[i] = BSWAP32(cl);
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2226
						}
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2227
						break;
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2228
				}
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2229
				break;
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2230
		}
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2231
	}
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2232
}
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2233
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2234
/* Action 0x00 (GLS_RESERVE) */
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2235
static void ReserveChangeInfo(byte *buf, int len)
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2236
{
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2237
	byte *bufend = buf + len;
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2238
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2239
	if (!check_length(len, 6, "InitChangeInfo")) return;
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2240
	buf++;
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2241
	uint8 feature  = grf_load_byte(&buf);
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2242
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2243
	if (feature != GSF_CARGOS) return;
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2244
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2245
	uint8 numprops = grf_load_byte(&buf);
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2246
	uint8 numinfo  = grf_load_byte(&buf);
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2247
	uint8 index    = grf_load_byte(&buf);
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2248
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2249
	while (numprops-- && buf < bufend) {
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2250
		uint8 prop = grf_load_byte(&buf);
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2251
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2252
		if (CargoChangeInfo(index, numinfo, prop, &buf, bufend - buf)) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2253
			grfmsg(2, "ReserveChangeInfo: Ignoring property 0x%02X (not implemented)", prop);
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2254
		}
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2255
	}
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2256
}
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  2257
1883
3b02000cfbe0 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1873
diff changeset
  2258
/**
3b02000cfbe0 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1873
diff changeset
  2259
 * Creates a spritegroup representing a callback result
3b02000cfbe0 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1873
diff changeset
  2260
 * @param value The value that was used to represent this callback result
3b02000cfbe0 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1873
diff changeset
  2261
 * @return A spritegroup representing that callback result
3b02000cfbe0 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1873
diff changeset
  2262
 */
4893
07d158194395 (svn r6837) - Codechange: More const SpriteGroups missed in r6836
peter1138
parents: 4869
diff changeset
  2263
static const SpriteGroup* NewCallBackResultSpriteGroup(uint16 value)
1883
3b02000cfbe0 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1873
diff changeset
  2264
{
3595
20621831cd46 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3593
diff changeset
  2265
	SpriteGroup *group = AllocateSpriteGroup();
1883
3b02000cfbe0 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1873
diff changeset
  2266
2488
cbe3d6b60c27 (svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents: 2480
diff changeset
  2267
	group->type = SGT_CALLBACK;
1883
3b02000cfbe0 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1873
diff changeset
  2268
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  2269
	/* Old style callback results have the highest byte 0xFF so signify it is a callback result
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  2270
	 * New style ones only have the highest bit set (allows 15-bit results, instead of just 8) */
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  2271
	if ((value >> 8) == 0xFF) {
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  2272
		value &= ~0xFF00;
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  2273
	} else {
1883
3b02000cfbe0 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1873
diff changeset
  2274
		value &= ~0x8000;
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  2275
	}
1883
3b02000cfbe0 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1873
diff changeset
  2276
2488
cbe3d6b60c27 (svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents: 2480
diff changeset
  2277
	group->g.callback.result = value;
1883
3b02000cfbe0 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1873
diff changeset
  2278
3b02000cfbe0 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1873
diff changeset
  2279
	return group;
3b02000cfbe0 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1873
diff changeset
  2280
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2281
2489
88827d8ae517 (svn r3015) -NewGRF: Add a new sprite group result type, and support loading of callbacks results within random and "real" groups. (Not fully supported yet.)
peter1138
parents: 2488
diff changeset
  2282
/**
88827d8ae517 (svn r3015) -NewGRF: Add a new sprite group result type, and support loading of callbacks results within random and "real" groups. (Not fully supported yet.)
peter1138
parents: 2488
diff changeset
  2283
 * Creates a spritegroup representing a sprite number result.
6977
67b989528f3d (svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents: 6975
diff changeset
  2284
 * @param sprite The sprite number.
67b989528f3d (svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents: 6975
diff changeset
  2285
 * @param num_sprites The number of sprites per set.
2489
88827d8ae517 (svn r3015) -NewGRF: Add a new sprite group result type, and support loading of callbacks results within random and "real" groups. (Not fully supported yet.)
peter1138
parents: 2488
diff changeset
  2286
 * @return A spritegroup representing the sprite number result.
88827d8ae517 (svn r3015) -NewGRF: Add a new sprite group result type, and support loading of callbacks results within random and "real" groups. (Not fully supported yet.)
peter1138
parents: 2488
diff changeset
  2287
 */
4893
07d158194395 (svn r6837) - Codechange: More const SpriteGroups missed in r6836
peter1138
parents: 4869
diff changeset
  2288
static const SpriteGroup* NewResultSpriteGroup(SpriteID sprite, byte num_sprites)
2489
88827d8ae517 (svn r3015) -NewGRF: Add a new sprite group result type, and support loading of callbacks results within random and "real" groups. (Not fully supported yet.)
peter1138
parents: 2488
diff changeset
  2289
{
3595
20621831cd46 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3593
diff changeset
  2290
	SpriteGroup *group = AllocateSpriteGroup();
2489
88827d8ae517 (svn r3015) -NewGRF: Add a new sprite group result type, and support loading of callbacks results within random and "real" groups. (Not fully supported yet.)
peter1138
parents: 2488
diff changeset
  2291
	group->type = SGT_RESULT;
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2292
	group->g.result.sprite = sprite;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2293
	group->g.result.num_sprites = num_sprites;
2489
88827d8ae517 (svn r3015) -NewGRF: Add a new sprite group result type, and support loading of callbacks results within random and "real" groups. (Not fully supported yet.)
peter1138
parents: 2488
diff changeset
  2294
	return group;
88827d8ae517 (svn r3015) -NewGRF: Add a new sprite group result type, and support loading of callbacks results within random and "real" groups. (Not fully supported yet.)
peter1138
parents: 2488
diff changeset
  2295
}
88827d8ae517 (svn r3015) -NewGRF: Add a new sprite group result type, and support loading of callbacks results within random and "real" groups. (Not fully supported yet.)
peter1138
parents: 2488
diff changeset
  2296
356
e3721e481b38 (svn r544) -newgrf: codechange for better handling (pasky and octo__)
celestar
parents: 193
diff changeset
  2297
/* Action 0x01 */
369
ab2266938fa8 (svn r557) -newgrf: Rename all 'superset' tokens to 'group' and some other small renamings (pasky and octo).
darkvater
parents: 368
diff changeset
  2298
static void NewSpriteSet(byte *buf, int len)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2299
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2300
	/* <01> <feature> <num-sets> <num-ent>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2301
	 *
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2302
	 * B feature       feature to define sprites for
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2303
	 *                 0, 1, 2, 3: veh-type, 4: train stations
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2304
	 * B num-sets      number of sprite sets
2346
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
  2305
	 * E num-ent       how many entries per sprite set
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2306
	 *                 For vehicles, this is the number of different
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2307
	 *                         vehicle directions in each sprite set
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2308
	 *                         Set num-dirs=8, unless your sprites are symmetric.
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2309
	 *                         In that case, use num-dirs=4.
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2310
	 */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2311
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  2312
	if (!check_length(len, 4, "NewSpriteSet")) return;
2346
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
  2313
	buf++;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2314
	uint8 feature   = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2315
	uint8 num_sets  = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2316
	uint16 num_ents = grf_load_extended(&buf);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2317
2342
c19fb4f2df30 (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
  2318
	_cur_grffile->spriteset_start = _cur_spriteid;
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  2319
	_cur_grffile->spriteset_feature = feature;
2342
c19fb4f2df30 (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
  2320
	_cur_grffile->spriteset_numsets = num_sets;
c19fb4f2df30 (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
  2321
	_cur_grffile->spriteset_numents = num_ents;
c19fb4f2df30 (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
  2322
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  2323
	grfmsg(7, "New sprite set at %d of type %d, consisting of %d sets with %d views each (total %d)",
2342
c19fb4f2df30 (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
  2324
		_cur_spriteid, feature, num_sets, num_ents, num_sets * num_ents
c19fb4f2df30 (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
  2325
	);
c19fb4f2df30 (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
  2326
6614
b41f2210a494 (svn r9108) -Fix(9093) : MSVC was a bit unhappy with some of the type changes. So basically, widening the types makes the difference
belugas
parents: 6610
diff changeset
  2327
	for (uint16 i = 0; i < num_sets * num_ents; i++) {
7404
fc0559157f16 (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: 7390
diff changeset
  2328
		LoadNextSprite(_cur_spriteid++, _file_index, _nfo_line);
3557
5d12a78ce141 (svn r4431) - NewGRF: rename nfo_line to _nfo_line, to avoid confusing Darkvater ;)
peter1138
parents: 3555
diff changeset
  2329
		_nfo_line++;
2342
c19fb4f2df30 (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
  2330
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2331
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2332
7072
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2333
/* Action 0x01 (SKIP) */
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2334
static void SkipAct1(byte *buf, int len)
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2335
{
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2336
	if (!check_length(len, 4, "SkipAct1")) return;
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2337
	buf++;
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2338
	grf_load_byte(&buf);
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2339
	uint8 num_sets  = grf_load_byte(&buf);
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2340
	uint16 num_ents = grf_load_extended(&buf);
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2341
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2342
	_skip_sprites = num_sets * num_ents;
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2343
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2344
	grfmsg(3, "SkipAct1: Skipping %d sprites", _skip_sprites);
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2345
}
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  2346
3666
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2347
/* Helper function to either create a callback or link to a previously
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2348
 * defined spritegroup. */
4893
07d158194395 (svn r6837) - Codechange: More const SpriteGroups missed in r6836
peter1138
parents: 4869
diff changeset
  2349
static const SpriteGroup* GetGroupFromGroupID(byte setid, byte type, uint16 groupid)
3666
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2350
{
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2351
	if (HASBIT(groupid, 15)) return NewCallBackResultSpriteGroup(groupid);
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2352
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2353
	if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2354
		grfmsg(1, "GetGroupFromGroupID(0x%02X:0x%02X): Groupid 0x%04X does not exist, leaving empty", setid, type, groupid);
3666
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2355
		return NULL;
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2356
	}
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2357
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2358
	return _cur_grffile->spritegroups[groupid];
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2359
}
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2360
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2361
/* Helper function to either create a callback or a result sprite group. */
4893
07d158194395 (svn r6837) - Codechange: More const SpriteGroups missed in r6836
peter1138
parents: 4869
diff changeset
  2362
static const SpriteGroup* CreateGroupFromGroupID(byte feature, byte setid, byte type, uint16 spriteid, uint16 num_sprites)
3666
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2363
{
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2364
	if (HASBIT(spriteid, 15)) return NewCallBackResultSpriteGroup(spriteid);
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2365
3667
f87c17c36375 (svn r4582) - NewGRF: include an additional check to see if a spriteset id is within range.
peter1138
parents: 3666
diff changeset
  2366
	if (spriteid >= _cur_grffile->spriteset_numsets) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2367
		grfmsg(1, "CreateGroupFromGroupID(0x%02X:0x%02X): Sprite set %u invalid, max %u", setid, type, spriteid, _cur_grffile->spriteset_numsets);
3667
f87c17c36375 (svn r4582) - NewGRF: include an additional check to see if a spriteset id is within range.
peter1138
parents: 3666
diff changeset
  2368
		return NULL;
f87c17c36375 (svn r4582) - NewGRF: include an additional check to see if a spriteset id is within range.
peter1138
parents: 3666
diff changeset
  2369
	}
f87c17c36375 (svn r4582) - NewGRF: include an additional check to see if a spriteset id is within range.
peter1138
parents: 3666
diff changeset
  2370
3666
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2371
	/* Check if the sprite is within range. This can fail if the Action 0x01
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2372
	 * is skipped, as TTDPatch mandates that Action 0x02s must be processed.
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2373
	 * We don't have that rule, but must live by the Patch... */
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2374
	if (_cur_grffile->spriteset_start + spriteid * num_sprites + num_sprites > _cur_spriteid) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2375
		grfmsg(1, "CreateGroupFromGroupID(0x%02X:0x%02X): Real Sprite IDs 0x%04X - 0x%04X do not (all) exist (max 0x%04X), leaving empty",
3666
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2376
				setid, type,
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2377
				_cur_grffile->spriteset_start + spriteid * num_sprites,
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2378
				_cur_grffile->spriteset_start + spriteid * num_sprites + num_sprites - 1, _cur_spriteid - 1);
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2379
		return NULL;
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2380
	}
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2381
3803
1bd124196372 (svn r4811) - NewGRF: only check a sprite set's feature when assigning a sprite result sprite group.
peter1138
parents: 3785
diff changeset
  2382
	if (feature != _cur_grffile->spriteset_feature) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2383
		grfmsg(1, "CreateGroupFromGroupID(0x%02X:0x%02X): Sprite set feature 0x%02X does not match action feature 0x%02X, skipping",
7381
bdc89f7887a1 (svn r10128) -Fix (r4811): missing printf parameters in newgrf debug message
peter1138
parents: 7369
diff changeset
  2384
				setid, type,
3803
1bd124196372 (svn r4811) - NewGRF: only check a sprite set's feature when assigning a sprite result sprite group.
peter1138
parents: 3785
diff changeset
  2385
				_cur_grffile->spriteset_feature, feature);
1bd124196372 (svn r4811) - NewGRF: only check a sprite set's feature when assigning a sprite result sprite group.
peter1138
parents: 3785
diff changeset
  2386
		return NULL;
1bd124196372 (svn r4811) - NewGRF: only check a sprite set's feature when assigning a sprite result sprite group.
peter1138
parents: 3785
diff changeset
  2387
	}
1bd124196372 (svn r4811) - NewGRF: only check a sprite set's feature when assigning a sprite result sprite group.
peter1138
parents: 3785
diff changeset
  2388
3666
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2389
	return NewResultSpriteGroup(_cur_grffile->spriteset_start + spriteid * num_sprites, num_sprites);
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2390
}
975cd26c8df7 (svn r4581) - NewGRF: replace replicated action 2 code with two functions to simplify code somewhat. Also check that a sprite id is
peter1138
parents: 3648
diff changeset
  2391
356
e3721e481b38 (svn r544) -newgrf: codechange for better handling (pasky and octo__)
celestar
parents: 193
diff changeset
  2392
/* Action 0x02 */
369
ab2266938fa8 (svn r557) -newgrf: Rename all 'superset' tokens to 'group' and some other small renamings (pasky and octo).
darkvater
parents: 368
diff changeset
  2393
static void NewSpriteGroup(byte *buf, int len)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2394
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2395
	/* <02> <feature> <set-id> <type/num-entries> <feature-specific-data...>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2396
	 *
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2397
	 * B feature       see action 1
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2398
	 * B set-id        ID of this particular definition
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2399
	 * B type/num-entries
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2400
	 *                 if 80 or greater, this is a randomized or variational
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2401
	 *                 list definition, see below
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2402
	 *                 otherwise it specifies a number of entries, the exact
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2403
	 *                 meaning depends on the feature
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2404
	 * V feature-specific-data (huge mess, don't even look it up --pasky) */
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2405
	SpriteGroup *group = NULL;
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2406
	byte *bufend = buf + len;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 74
diff changeset
  2407
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  2408
	if (!check_length(len, 5, "NewSpriteGroup")) return;
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2409
	buf++;
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2410
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2411
	uint8 feature = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2412
	uint8 setid   = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2413
	uint8 type    = grf_load_byte(&buf);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2414
2444
e618726432a4 (svn r2970) - Newgrf: Allocate spritegroups dynamically; this allows a cargo ID to reference the previous definition of the same cargo ID, instead of causing loops.
peter1138
parents: 2442
diff changeset
  2415
	if (setid >= _cur_grffile->spritegroups_count) {
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  2416
		/* Allocate memory for new sprite group references. */
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  2417
		_cur_grffile->spritegroups = ReallocT(_cur_grffile->spritegroups, setid + 1);
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  2418
		/* Initialise new space to NULL */
2488
cbe3d6b60c27 (svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents: 2480
diff changeset
  2419
		for (; _cur_grffile->spritegroups_count < (setid + 1); _cur_grffile->spritegroups_count++)
cbe3d6b60c27 (svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents: 2480
diff changeset
  2420
			_cur_grffile->spritegroups[_cur_grffile->spritegroups_count] = NULL;
2444
e618726432a4 (svn r2970) - Newgrf: Allocate spritegroups dynamically; this allows a cargo ID to reference the previous definition of the same cargo ID, instead of causing loops.
peter1138
parents: 2442
diff changeset
  2421
	}
e618726432a4 (svn r2970) - Newgrf: Allocate spritegroups dynamically; this allows a cargo ID to reference the previous definition of the same cargo ID, instead of causing loops.
peter1138
parents: 2442
diff changeset
  2422
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2423
	switch (type) {
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2424
		/* Deterministic Sprite Group */
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2425
		case 0x81: // Self scope, byte
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2426
		case 0x82: // Parent scope, byte
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2427
		case 0x85: // Self scope, word
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2428
		case 0x86: // Parent scope, word
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2429
		case 0x89: // Self scope, dword
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2430
		case 0x8A: // Parent scope, dword
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2431
		{
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2432
			byte varadjust;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2433
			byte varsize;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2434
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2435
			/* Check we can load the var size parameter */
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  2436
			if (!check_length(bufend - buf, 1, "NewSpriteGroup (Deterministic) (1)")) return;
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2437
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2438
			group = AllocateSpriteGroup();
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2439
			group->type = SGT_DETERMINISTIC;
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2440
			group->g.determ.var_scope = HASBIT(type, 1) ? VSG_SCOPE_PARENT : VSG_SCOPE_SELF;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2441
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2442
			switch (GB(type, 2, 2)) {
3672
73caf2e829f8 (svn r4588) - NewGRF: silence a false compiler warning
peter1138
parents: 3668
diff changeset
  2443
				default: NOT_REACHED();
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2444
				case 0: group->g.determ.size = DSG_SIZE_BYTE;  varsize = 1; break;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2445
				case 1: group->g.determ.size = DSG_SIZE_WORD;  varsize = 2; break;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2446
				case 2: group->g.determ.size = DSG_SIZE_DWORD; varsize = 4; break;
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2447
			}
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2448
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  2449
			if (!check_length(bufend - buf, 5 + varsize, "NewSpriteGroup (Deterministic) (2)")) return;
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2450
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2451
			/* Loop through the var adjusts. Unfortunately we don't know how many we have
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2452
			 * from the outset, so we shall have to keep reallocing. */
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2453
			do {
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2454
				DeterministicSpriteGroupAdjust *adjust;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2455
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2456
				if (group->g.determ.num_adjusts > 0) {
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  2457
					if (!check_length(bufend - buf, 2 + varsize + 3, "NewSpriteGroup (Deterministic) (3)")) return;
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2458
				}
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2459
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2460
				group->g.determ.num_adjusts++;
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  2461
				group->g.determ.adjusts = ReallocT(group->g.determ.adjusts, group->g.determ.num_adjusts);
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2462
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2463
				adjust = &group->g.determ.adjusts[group->g.determ.num_adjusts - 1];
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2464
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2465
				/* The first var adjust doesn't have an operation specified, so we set it to add. */
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
  2466
				adjust->operation = group->g.determ.num_adjusts == 1 ? DSGA_OP_ADD : (DeterministicSpriteGroupAdjustOperation)grf_load_byte(&buf);
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2467
				adjust->variable  = grf_load_byte(&buf);
5868
baa704b6dc4f (svn r8075) -Feature: Add support for variable 7E - subroutines. (peter1138)
maedhros
parents: 5860
diff changeset
  2468
				if (adjust->variable == 0x7E) {
baa704b6dc4f (svn r8075) -Feature: Add support for variable 7E - subroutines. (peter1138)
maedhros
parents: 5860
diff changeset
  2469
					/* Link subroutine group */
baa704b6dc4f (svn r8075) -Feature: Add support for variable 7E - subroutines. (peter1138)
maedhros
parents: 5860
diff changeset
  2470
					adjust->subroutine = GetGroupFromGroupID(setid, type, grf_load_byte(&buf));
baa704b6dc4f (svn r8075) -Feature: Add support for variable 7E - subroutines. (peter1138)
maedhros
parents: 5860
diff changeset
  2471
				} else {
baa704b6dc4f (svn r8075) -Feature: Add support for variable 7E - subroutines. (peter1138)
maedhros
parents: 5860
diff changeset
  2472
					adjust->parameter = IS_BYTE_INSIDE(adjust->variable, 0x60, 0x80) ? grf_load_byte(&buf) : 0;
baa704b6dc4f (svn r8075) -Feature: Add support for variable 7E - subroutines. (peter1138)
maedhros
parents: 5860
diff changeset
  2473
				}
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2474
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2475
				varadjust = grf_load_byte(&buf);
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2476
				adjust->shift_num = GB(varadjust, 0, 5);
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
  2477
				adjust->type      = (DeterministicSpriteGroupAdjustType)GB(varadjust, 6, 2);
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2478
				adjust->and_mask  = grf_load_var(varsize, &buf);
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2479
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2480
				if (adjust->type != DSGA_TYPE_NONE) {
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2481
					adjust->add_val    = grf_load_var(varsize, &buf);
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2482
					adjust->divmod_val = grf_load_var(varsize, &buf);
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2483
				} else {
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2484
					adjust->add_val    = 0;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2485
					adjust->divmod_val = 0;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2486
				}
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2487
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2488
				/* Continue reading var adjusts while bit 5 is set. */
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2489
			} while (HASBIT(varadjust, 5));
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2490
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2491
			group->g.determ.num_ranges = grf_load_byte(&buf);
7155
d7f32c08076b (svn r9890) -Codechange: Don't allocate space for 0 spriteset ranges
peter1138
parents: 7148
diff changeset
  2492
			if (group->g.determ.num_ranges > 0) group->g.determ.ranges = CallocT<DeterministicSpriteGroupRange>(group->g.determ.num_ranges);
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2493
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  2494
			if (!check_length(bufend - buf, 2 + (2 + 2 * varsize) * group->g.determ.num_ranges, "NewSpriteGroup (Deterministic)")) return;
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2495
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2496
			for (uint i = 0; i < group->g.determ.num_ranges; i++) {
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2497
				group->g.determ.ranges[i].group = GetGroupFromGroupID(setid, type, grf_load_word(&buf));
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2498
				group->g.determ.ranges[i].low   = grf_load_var(varsize, &buf);
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2499
				group->g.determ.ranges[i].high  = grf_load_var(varsize, &buf);
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2500
			}
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2501
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2502
			group->g.determ.default_group = GetGroupFromGroupID(setid, type, grf_load_word(&buf));
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2503
			break;
445
0e3fa3da3899 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 441
diff changeset
  2504
		}
0e3fa3da3899 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 441
diff changeset
  2505
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2506
		/* Randomized Sprite Group */
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2507
		case 0x80: // Self scope
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2508
		case 0x83: // Parent scope
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2509
		{
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  2510
			if (!check_length(bufend - buf, 7, "NewSpriteGroup (Randomized) (1)")) return;
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2511
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2512
			group = AllocateSpriteGroup();
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2513
			group->type = SGT_RANDOMIZED;
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2514
			group->g.random.var_scope = HASBIT(type, 1) ? VSG_SCOPE_PARENT : VSG_SCOPE_SELF;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2515
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2516
			uint8 triggers = grf_load_byte(&buf);
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2517
			group->g.random.triggers       = GB(triggers, 0, 7);
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2518
			group->g.random.cmp_mode       = HASBIT(triggers, 7) ? RSG_CMP_ALL : RSG_CMP_ANY;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2519
			group->g.random.lowest_randbit = grf_load_byte(&buf);
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2520
			group->g.random.num_groups     = grf_load_byte(&buf);
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  2521
			group->g.random.groups = CallocT<const SpriteGroup*>(group->g.random.num_groups);
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2522
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  2523
			if (!check_length(bufend - buf, 2 * group->g.random.num_groups, "NewSpriteGroup (Randomized) (2)")) return;
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2524
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2525
			for (uint i = 0; i < group->g.random.num_groups; i++) {
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2526
				group->g.random.groups[i] = GetGroupFromGroupID(setid, type, grf_load_word(&buf));
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2527
			}
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2528
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2529
			break;
2489
88827d8ae517 (svn r3015) -NewGRF: Add a new sprite group result type, and support loading of callbacks results within random and "real" groups. (Not fully supported yet.)
peter1138
parents: 2488
diff changeset
  2530
		}
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2531
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2532
		/* Neither a variable or randomized sprite group... must be a real group */
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2533
		default:
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2534
		{
3803
1bd124196372 (svn r4811) - NewGRF: only check a sprite set's feature when assigning a sprite result sprite group.
peter1138
parents: 3785
diff changeset
  2535
1bd124196372 (svn r4811) - NewGRF: only check a sprite set's feature when assigning a sprite result sprite group.
peter1138
parents: 3785
diff changeset
  2536
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2537
			switch (feature) {
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2538
				case GSF_TRAIN:
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2539
				case GSF_ROAD:
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2540
				case GSF_SHIP:
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2541
				case GSF_AIRCRAFT:
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2542
				case GSF_STATION:
7079
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2543
				case GSF_CANAL:
6691
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  2544
				case GSF_CARGOS:
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2545
				{
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2546
					byte sprites     = _cur_grffile->spriteset_numents;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2547
					byte num_loaded  = type;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2548
					byte num_loading = grf_load_byte(&buf);
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2549
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2550
					if (_cur_grffile->spriteset_start == 0) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  2551
						grfmsg(0, "NewSpriteGroup: No sprite set to work on! Skipping");
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2552
						return;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2553
					}
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2554
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  2555
					if (!check_length(bufend - buf, 2 * num_loaded + 2 * num_loading, "NewSpriteGroup (Real) (1)")) return;
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2556
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2557
					group = AllocateSpriteGroup();
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2558
					group->type = SGT_REAL;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2559
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2560
					group->g.real.num_loaded  = num_loaded;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2561
					group->g.real.num_loading = num_loading;
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  2562
					if (num_loaded  > 0) group->g.real.loaded = CallocT<const SpriteGroup*>(num_loaded);
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  2563
					if (num_loading > 0) group->g.real.loading = CallocT<const SpriteGroup*>(num_loading);
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2564
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  2565
					grfmsg(6, "NewSpriteGroup: New SpriteGroup 0x%02X, %u views, %u loaded, %u loading",
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2566
							setid, sprites, num_loaded, num_loading);
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2567
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2568
					for (uint i = 0; i < num_loaded; i++) {
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2569
						uint16 spriteid = grf_load_word(&buf);
3803
1bd124196372 (svn r4811) - NewGRF: only check a sprite set's feature when assigning a sprite result sprite group.
peter1138
parents: 3785
diff changeset
  2570
						group->g.real.loaded[i] = CreateGroupFromGroupID(feature, setid, type, spriteid, sprites);
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  2571
						grfmsg(8, "NewSpriteGroup: + rg->loaded[%i]  = subset %u", i, spriteid);
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2572
					}
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2573
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2574
					for (uint i = 0; i < num_loading; i++) {
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2575
						uint16 spriteid = grf_load_word(&buf);
3803
1bd124196372 (svn r4811) - NewGRF: only check a sprite set's feature when assigning a sprite result sprite group.
peter1138
parents: 3785
diff changeset
  2576
						group->g.real.loading[i] = CreateGroupFromGroupID(feature, setid, type, spriteid, sprites);
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  2577
						grfmsg(8, "NewSpriteGroup: + rg->loading[%i] = subset %u", i, spriteid);
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2578
					}
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2579
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2580
					break;
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2581
				}
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2582
7670
a37783587593 (svn r10448) -Codechange: Industry Tiles and Houses share almost the same spritegroup format.
belugas
parents: 7664
diff changeset
  2583
				case GSF_TOWNHOUSE:
a37783587593 (svn r10448) -Codechange: Industry Tiles and Houses share almost the same spritegroup format.
belugas
parents: 7664
diff changeset
  2584
				case GSF_INDUSTRYTILES: {
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2585
					byte sprites     = _cur_grffile->spriteset_numents;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2586
					byte num_sprites = max((uint8)1, type);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2587
					uint i;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2588
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2589
					group = AllocateSpriteGroup();
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2590
					group->type = SGT_TILELAYOUT;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2591
					group->g.layout.num_sprites = sprites;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2592
					group->g.layout.dts = CallocT<DrawTileSprites>(1);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2593
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2594
					/* Groundsprite */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2595
					group->g.layout.dts->ground_sprite = grf_load_word(&buf);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2596
					group->g.layout.dts->ground_pal    = grf_load_word(&buf);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2597
					/* Remap transparent/colour modifier bits */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2598
					if (HASBIT(group->g.layout.dts->ground_sprite, 14)) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2599
						CLRBIT(group->g.layout.dts->ground_sprite, 14);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2600
						SETBIT(group->g.layout.dts->ground_sprite, PALETTE_MODIFIER_TRANSPARENT);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2601
					}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2602
					if (HASBIT(group->g.layout.dts->ground_sprite, 15)) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2603
						CLRBIT(group->g.layout.dts->ground_sprite, 15);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2604
						SETBIT(group->g.layout.dts->ground_sprite, PALETTE_MODIFIER_COLOR);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2605
					}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2606
					if (HASBIT(group->g.layout.dts->ground_pal, 14)) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2607
						CLRBIT(group->g.layout.dts->ground_pal, 14);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2608
						SETBIT(group->g.layout.dts->ground_sprite, SPRITE_MODIFIER_OPAQUE);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2609
					}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2610
					if (HASBIT(group->g.layout.dts->ground_pal, 15)) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2611
						/* Bit 31 set means this is a custom sprite, so rewrite it to the
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2612
						 * last spriteset defined. */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2613
						SpriteID sprite = _cur_grffile->spriteset_start + GB(group->g.layout.dts->ground_sprite, 0, 14) * sprites;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2614
						SB(group->g.layout.dts->ground_sprite, 0, SPRITE_WIDTH, sprite);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2615
						CLRBIT(group->g.layout.dts->ground_pal, 15);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2616
					}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2617
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2618
					group->g.layout.dts->seq = CallocT<DrawTileSeqStruct>(num_sprites + 1);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2619
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2620
					for (i = 0; i < num_sprites; i++) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2621
						DrawTileSeqStruct *seq = (DrawTileSeqStruct*)&group->g.layout.dts->seq[i];
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2622
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2623
						seq->image = grf_load_word(&buf);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2624
						seq->pal   = grf_load_word(&buf);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2625
						seq->delta_x = grf_load_byte(&buf);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2626
						seq->delta_y = grf_load_byte(&buf);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2627
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2628
						if (HASBIT(seq->image, 14)) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2629
							CLRBIT(seq->image, 14);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2630
							SETBIT(seq->image, PALETTE_MODIFIER_TRANSPARENT);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2631
						}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2632
						if (HASBIT(seq->image, 15)) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2633
							CLRBIT(seq->image, 15);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2634
							SETBIT(seq->image, PALETTE_MODIFIER_COLOR);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2635
						}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2636
						if (HASBIT(seq->pal, 14)) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2637
							CLRBIT(seq->pal, 14);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2638
							SETBIT(seq->image, SPRITE_MODIFIER_OPAQUE);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2639
						}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2640
						if (HASBIT(seq->pal, 15)) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2641
							/* Bit 31 set means this is a custom sprite, so rewrite it to the
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2642
							 * last spriteset defined. */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2643
							SpriteID sprite = _cur_grffile->spriteset_start + GB(seq->image, 0, 14) * sprites;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2644
							SB(seq->image, 0, SPRITE_WIDTH, sprite);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2645
							CLRBIT(seq->pal, 15);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2646
						}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2647
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2648
						if (type > 0) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2649
							seq->delta_z = grf_load_byte(&buf);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2650
							if ((byte)seq->delta_z == 0x80) continue;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2651
						}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2652
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2653
						seq->size_x = grf_load_byte(&buf);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2654
						seq->size_y = grf_load_byte(&buf);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2655
						seq->size_z = grf_load_byte(&buf);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2656
					}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2657
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2658
					/* Set the terminator value. */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2659
					((DrawTileSeqStruct*)group->g.layout.dts->seq)[i].delta_x = (byte)0x80;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2660
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2661
					break;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2662
				}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  2663
7664
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2664
				case GSF_INDUSTRIES: {
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2665
					if (type > 1) {
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2666
						grfmsg(1, "NewSpriteGroup: Unsupported industry production version %d, skipping", type);
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2667
						break;
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2668
					}
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2669
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2670
					group = AllocateSpriteGroup();
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2671
					group->type = SGT_INDUSTRY_PRODUCTION;
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2672
					group->g.indprod.version = type;
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2673
					if (type == 0) {
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2674
						for (uint i = 0; i < 3; i++) {
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2675
							group->g.indprod.substract_input[i] = grf_load_word(&buf);
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2676
						}
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2677
						for (uint i = 0; i < 2; i++) {
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2678
							group->g.indprod.add_output[i] = grf_load_word(&buf);
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2679
						}
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2680
						group->g.indprod.again = grf_load_byte(&buf);
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2681
					} else {
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2682
						for (uint i = 0; i < 3; i++) {
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2683
							group->g.indprod.substract_input[i] = grf_load_byte(&buf);
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2684
						}
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2685
						for (uint i = 0; i < 2; i++) {
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2686
							group->g.indprod.add_output[i] = grf_load_byte(&buf);
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2687
						}
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2688
						group->g.indprod.again = grf_load_byte(&buf);
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2689
					}
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2690
					break;
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2691
				}
81c35390400e (svn r10442) -Codechange: implement the industry production callback.
rubidium
parents: 7658
diff changeset
  2692
3668
d7ed0a867b49 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3667
diff changeset
  2693
				/* Loading of Tile Layout and Production Callback groups would happen here */
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  2694
				default: grfmsg(1, "NewSpriteGroup: Unsupported feature %d, skipping", feature);
3633
414a50db1ac3 (svn r4537) - NewGRF: replace if cascade with a switch block in the sprite group loader
peter1138
parents: 3630
diff changeset
  2695
			}
2489
88827d8ae517 (svn r3015) -NewGRF: Add a new sprite group result type, and support loading of callbacks results within random and "real" groups. (Not fully supported yet.)
peter1138
parents: 2488
diff changeset
  2696
		}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2697
	}
2444
e618726432a4 (svn r2970) - Newgrf: Allocate spritegroups dynamically; this allows a cargo ID to reference the previous definition of the same cargo ID, instead of causing loops.
peter1138
parents: 2442
diff changeset
  2698
e618726432a4 (svn r2970) - Newgrf: Allocate spritegroups dynamically; this allows a cargo ID to reference the previous definition of the same cargo ID, instead of causing loops.
peter1138
parents: 2442
diff changeset
  2699
	_cur_grffile->spritegroups[setid] = group;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2700
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2701
6469
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2702
static CargoID TranslateCargo(uint8 feature, uint8 ctype)
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2703
{
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2704
	/* Special cargo types for purchase list and stations */
6474
24e7ceeb25f5 (svn r8891) -Codechange: Remove remains of global cargo scheme. All cargo mapping is now dealt with only in NewGRF code, on load where possible.
peter1138
parents: 6473
diff changeset
  2705
	if (feature == GSF_STATION && ctype == 0xFE) return CT_DEFAULT_NA;
24e7ceeb25f5 (svn r8891) -Codechange: Remove remains of global cargo scheme. All cargo mapping is now dealt with only in NewGRF code, on load where possible.
peter1138
parents: 6473
diff changeset
  2706
	if (ctype == 0xFF) return CT_PURCHASE;
6469
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2707
6687
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2708
	if (_cur_grffile->cargo_max == 0) {
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2709
		/* No cargo table, so use bitnum values */
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2710
		if (ctype >= 32) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2711
			grfmsg(1, "TranslateCargo: Cargo bitnum %d out of range (max 31), skipping.", ctype);
6687
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2712
			return CT_INVALID;
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2713
		}
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2714
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2715
		for (CargoID c = 0; c < NUM_CARGO; c++) {
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2716
			const CargoSpec *cs = GetCargo(c);
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2717
			if (!cs->IsValid()) continue;
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2718
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2719
			if (cs->bitnum == ctype) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2720
				grfmsg(6, "TranslateCargo: Cargo bitnum %d mapped to cargo type %d.", ctype, c);
6687
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2721
				return c;
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2722
			}
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2723
		}
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2724
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2725
		grfmsg(5, "TranslateCargo: Cargo bitnum %d not available in this climate, skipping.", ctype);
6687
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2726
		return CT_INVALID;
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2727
	}
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2728
6469
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2729
	/* Check if the cargo type is out of bounds of the cargo translation table */
6687
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2730
	if (ctype >= _cur_grffile->cargo_max) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2731
		grfmsg(1, "TranslateCargo: Cargo type %d out of range (max %d), skipping.", ctype, _cur_grffile->cargo_max - 1);
6469
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2732
		return CT_INVALID;
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2733
	}
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2734
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2735
	/* Look up the cargo label from the translation table */
6687
d2ef5eda4562 (svn r9413) -Codechange: Remove default cargo translation table and use bitnums directly if no table is provided. This lets pre-cargolabel cargo definitions work.
peter1138
parents: 6685
diff changeset
  2736
	CargoLabel cl = _cur_grffile->cargo_list[ctype];
6469
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2737
	if (cl == 0) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2738
		grfmsg(5, "TranslateCargo: Cargo type %d not available in this climate, skipping.", ctype);
6469
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2739
		return CT_INVALID;
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2740
	}
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2741
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2742
	ctype = GetCargoIDByLabel(cl);
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2743
	if (ctype == CT_INVALID) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2744
		grfmsg(5, "TranslateCargo: Cargo '%c%c%c%c' unsupported, skipping.", GB(cl, 24, 8), GB(cl, 16, 8), GB(cl, 8, 8), GB(cl, 0, 8));
6469
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2745
		return CT_INVALID;
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2746
	}
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2747
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2748
	grfmsg(6, "TranslateCargo: Cargo '%c%c%c%c' mapped to cargo type %d.", GB(cl, 24, 8), GB(cl, 16, 8), GB(cl, 8, 8), GB(cl, 0, 8), ctype);
6469
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2749
	return ctype;
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2750
}
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2751
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2752
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2753
static void VehicleMapSpriteGroup(byte *buf, byte feature, uint8 idcount, uint8 cidcount, bool wagover)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2754
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2755
	static byte *last_engines;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2756
	static int last_engines_count;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2757
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2758
	if (!wagover) {
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2759
		if (last_engines_count != idcount) {
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2760
			last_engines = ReallocT(last_engines, idcount);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2761
			last_engines_count = idcount;
403
bfb365c74e80 (svn r600) -newgrf: Relocation offset for custom station sprites is now stored separately, making it possible to show different sprites in waypoint selection dialog (pasky).
darkvater
parents: 401
diff changeset
  2762
		}
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2763
	} else {
372
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
  2764
		if (last_engines_count == 0) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2765
			grfmsg(0, "VehicleMapSpriteGroup: WagonOverride: No engine to do override with");
372
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
  2766
			return;
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
  2767
		}
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2768
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2769
		grfmsg(6, "VehicleMapSpriteGroup: WagonOverride: %u engines, %u wagons",
379
4605aa187b18 (svn r568) -newgrf: Make @wagover bool, simplifying stuff. (pasky)
celestar
parents: 378
diff changeset
  2770
				last_engines_count, idcount);
372
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
  2771
	}
398
20f8a2faf809 (svn r590) -newgrf: Instead of a bunch of statinfo arrays, use station-array of struct StationSpec-s (pasky).
darkvater
parents: 397
diff changeset
  2772
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2773
	for (uint i = 0; i < idcount; i++) {
372
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
  2774
		uint8 engine_id = buf[3 + i];
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
  2775
		uint8 engine = engine_id + _vehshifts[feature];
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2776
		byte *bp = &buf[4 + idcount];
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2777
372
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
  2778
		if (engine_id > _vehcounts[feature]) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  2779
			grfmsg(0, "Id %u for feature 0x%02X is out of bounds", engine_id, feature);
372
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
  2780
			return;
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
  2781
		}
1cc9354e2362 (svn r560) -newgrf: General cleanup of the code (pasky & octo)
celestar
parents: 369
diff changeset
  2782
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2783
		grfmsg(7, "VehicleMapSpriteGroup: [%d] Engine %d...", i, engine);
379
4605aa187b18 (svn r568) -newgrf: Make @wagover bool, simplifying stuff. (pasky)
celestar
parents: 378
diff changeset
  2784
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2785
		for (uint c = 0; c < cidcount; c++) {
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2786
			uint8 ctype = grf_load_byte(&bp);
369
ab2266938fa8 (svn r557) -newgrf: Rename all 'superset' tokens to 'group' and some other small renamings (pasky and octo).
darkvater
parents: 368
diff changeset
  2787
			uint16 groupid = grf_load_word(&bp);
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2788
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2789
			grfmsg(8, "VehicleMapSpriteGroup: * [%d] Cargo type 0x%X, group id 0x%02X", c, ctype, groupid);
379
4605aa187b18 (svn r568) -newgrf: Make @wagover bool, simplifying stuff. (pasky)
celestar
parents: 378
diff changeset
  2790
2516
b11f1229cefd (svn r3045) -NewGRF, Codechange: Don't attempt to map and empty sprite group to a vehicle.
peter1138
parents: 2515
diff changeset
  2791
			if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2792
				grfmsg(1, "VehicleMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping", groupid, _cur_grffile->spritegroups_count);
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2793
				continue;
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2794
			}
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2795
6469
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2796
			ctype = TranslateCargo(feature, ctype);
05a2e97144ec (svn r8886) -Codechange: (NewGRF) Add (partial) cargo translation table support, applied to action 3s only.
peter1138
parents: 6468
diff changeset
  2797
			if (ctype == CT_INVALID) continue;
5338
5b48218d8bd2 (svn r7503) -Codechange: [NewGRF] Add bounds checking for spriteset cargo types. (NewCargo support will change this rule a bit...)
peter1138
parents: 5334
diff changeset
  2798
379
4605aa187b18 (svn r568) -newgrf: Make @wagover bool, simplifying stuff. (pasky)
celestar
parents: 378
diff changeset
  2799
			if (wagover) {
4869
cded5f3a83c9 (svn r6795) - NewGRF: Add support for cargo-specific wagon overrides.
peter1138
parents: 4818
diff changeset
  2800
				SetWagonOverrideSprites(engine, ctype, _cur_grffile->spritegroups[groupid], last_engines, last_engines_count);
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2801
			} else {
2444
e618726432a4 (svn r2970) - Newgrf: Allocate spritegroups dynamically; this allows a cargo ID to reference the previous definition of the same cargo ID, instead of causing loops.
peter1138
parents: 2442
diff changeset
  2802
				SetCustomEngineSprites(engine, ctype, _cur_grffile->spritegroups[groupid]);
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2803
				last_engines[i] = engine;
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2804
			}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2805
		}
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2806
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2807
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2808
	{
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2809
		byte *bp = &buf[4 + idcount + cidcount * 3];
369
ab2266938fa8 (svn r557) -newgrf: Rename all 'superset' tokens to 'group' and some other small renamings (pasky and octo).
darkvater
parents: 368
diff changeset
  2810
		uint16 groupid = grf_load_word(&bp);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2811
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  2812
		grfmsg(8, "-- Default group id 0x%04X", groupid);
379
4605aa187b18 (svn r568) -newgrf: Make @wagover bool, simplifying stuff. (pasky)
celestar
parents: 378
diff changeset
  2813
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  2814
		for (uint i = 0; i < idcount; i++) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2815
			uint8 engine = buf[3 + i] + _vehshifts[feature];
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2816
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  2817
			/* Don't tell me you don't love duplicated code! */
2516
b11f1229cefd (svn r3045) -NewGRF, Codechange: Don't attempt to map and empty sprite group to a vehicle.
peter1138
parents: 2515
diff changeset
  2818
			if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
7301
0e314c60f7a0 (svn r10044) -Fix: Minor NewGRF debug message fixes, and skip sprites of an unsupported Action 5 feature.
peter1138
parents: 7277
diff changeset
  2819
				grfmsg(1, "VehicleMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping",
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2820
				       groupid, _cur_grffile->spritegroups_count);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2821
				continue;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2822
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2823
379
4605aa187b18 (svn r568) -newgrf: Make @wagover bool, simplifying stuff. (pasky)
celestar
parents: 378
diff changeset
  2824
			if (wagover) {
3695
aae28fa7190e (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3694
diff changeset
  2825
				/* If the ID for this action 3 is the same as the vehicle ID,
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2826
 * this indicates we have a helicopter rotor override. */
3695
aae28fa7190e (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3694
diff changeset
  2827
				if (feature == GSF_AIRCRAFT && engine == last_engines[i]) {
aae28fa7190e (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3694
diff changeset
  2828
					SetRotorOverrideSprites(engine, _cur_grffile->spritegroups[groupid]);
aae28fa7190e (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3694
diff changeset
  2829
				} else {
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  2830
					/* TODO: No multiple cargo types per vehicle yet. --pasky */
6474
24e7ceeb25f5 (svn r8891) -Codechange: Remove remains of global cargo scheme. All cargo mapping is now dealt with only in NewGRF code, on load where possible.
peter1138
parents: 6473
diff changeset
  2831
					SetWagonOverrideSprites(engine, CT_DEFAULT, _cur_grffile->spritegroups[groupid], last_engines, last_engines_count);
3695
aae28fa7190e (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3694
diff changeset
  2832
				}
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2833
			} else {
6474
24e7ceeb25f5 (svn r8891) -Codechange: Remove remains of global cargo scheme. All cargo mapping is now dealt with only in NewGRF code, on load where possible.
peter1138
parents: 6473
diff changeset
  2834
				SetCustomEngineSprites(engine, CT_DEFAULT, _cur_grffile->spritegroups[groupid]);
3924
de86db4fbd1e (svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents: 3895
diff changeset
  2835
				SetEngineGRF(engine, _cur_grffile);
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  2836
				last_engines[i] = engine;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2837
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2838
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2839
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2840
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2841
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2842
7079
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2843
static void CanalMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount)
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2844
{
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2845
	byte *bp = &buf[4 + idcount + cidcount * 3];
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2846
	uint16 groupid = grf_load_word(&bp);
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2847
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2848
	if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2849
		grfmsg(1, "CanalMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping.",
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2850
		       groupid, _cur_grffile->spritegroups_count);
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2851
		return;
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2852
	}
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2853
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2854
	for (uint i = 0; i < idcount; i++) {
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2855
		CanalFeature cf = (CanalFeature)buf[3 + i];
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2856
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2857
		if (cf >= CF_END) {
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2858
			grfmsg(1, "CanalMapSpriteGroup: Canal subset %d out of range, skipping", cf);
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2859
			continue;
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2860
		}
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2861
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2862
		_canal_sg[cf] = _cur_grffile->spritegroups[groupid];
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2863
	}
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2864
}
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2865
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  2866
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2867
static void StationMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount)
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2868
{
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2869
	for (uint i = 0; i < idcount; i++) {
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2870
		uint8 stid = buf[3 + i];
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2871
		StationSpec *statspec = _cur_grffile->stations[stid];
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2872
		byte *bp = &buf[4 + idcount];
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2873
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2874
		for (uint c = 0; c < cidcount; c++) {
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2875
			uint8 ctype = grf_load_byte(&bp);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2876
			uint16 groupid = grf_load_word(&bp);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2877
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2878
			if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2879
				grfmsg(1, "StationMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping",
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2880
				       groupid, _cur_grffile->spritegroups_count);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2881
				continue;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2882
			}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2883
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2884
			ctype = TranslateCargo(GSF_STATION, ctype);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2885
			if (ctype == CT_INVALID) continue;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2886
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2887
			statspec->spritegroup[ctype] = _cur_grffile->spritegroups[groupid];
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2888
		}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2889
	}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2890
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2891
	{
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2892
		byte *bp = &buf[4 + idcount + cidcount * 3];
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2893
		uint16 groupid = grf_load_word(&bp);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2894
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2895
		if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2896
			grfmsg(1, "StationMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping",
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2897
			       groupid, _cur_grffile->spritegroups_count);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2898
			return;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2899
		}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2900
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2901
		for (uint i = 0; i < idcount; i++) {
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2902
			uint8 stid = buf[3 + i];
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2903
			StationSpec *statspec = _cur_grffile->stations[stid];
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2904
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2905
			statspec->spritegroup[CT_DEFAULT] = _cur_grffile->spritegroups[groupid];
6947
c21859ab4493 (svn r9601) -Codechange: Store grf file reference in station spec, not just GRF ID
peter1138
parents: 6920
diff changeset
  2906
			statspec->grffile = _cur_grffile;
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2907
			statspec->localidx = stid;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2908
			SetCustomStationSpec(statspec);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2909
		}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2910
	}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2911
}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2912
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2913
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2914
static void TownHouseMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount)
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2915
{
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2916
	byte *bp = &buf[4 + idcount + cidcount * 3];
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2917
	uint16 groupid = grf_load_word(&bp);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2918
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2919
	if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2920
		grfmsg(1, "TownHouseMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping.",
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2921
		       groupid, _cur_grffile->spritegroups_count);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2922
		return;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2923
	}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2924
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2925
	for (uint i = 0; i < idcount; i++) {
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2926
		uint8 hid = buf[3 + i];
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2927
		HouseSpec *hs = _cur_grffile->housespec[hid];
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2928
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2929
		if (hs == NULL) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2930
			grfmsg(1, "TownHouseMapSpriteGroup: Too many houses defined, skipping");
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2931
			return;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2932
		}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2933
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2934
		hs->spritegroup = _cur_grffile->spritegroups[groupid];
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2935
	}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2936
}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  2937
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2938
static void IndustryMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount)
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2939
{
7736
1119c5e38774 (svn r10521) -Fix: some NewGRFs did not check whether the newindustries bit was set, which breaks with a not-yet-finished-implementation of newindustries.
rubidium
parents: 7729
diff changeset
  2940
	if (!HASBIT(_ttdpatch_flags[3], 0x07)) return;
1119c5e38774 (svn r10521) -Fix: some NewGRFs did not check whether the newindustries bit was set, which breaks with a not-yet-finished-implementation of newindustries.
rubidium
parents: 7729
diff changeset
  2941
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2942
	byte *bp = &buf[4 + idcount + cidcount * 3];
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2943
	uint16 groupid = grf_load_word(&bp);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2944
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2945
	if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2946
		grfmsg(1, "IndustryMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping.",
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2947
		       groupid, _cur_grffile->spritegroups_count);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2948
		return;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2949
	}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2950
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2951
	for (uint i = 0; i < idcount; i++) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2952
		uint8 id = buf[3 + i];
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2953
		IndustrySpec *indsp = _cur_grffile->industryspec[id];
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2954
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2955
		if (indsp == NULL) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2956
			grfmsg(1, "IndustryMapSpriteGroup: Too many industries defined, skipping");
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2957
			return;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2958
		}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2959
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2960
		indsp->grf_prop.spritegroup = _cur_grffile->spritegroups[groupid];
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2961
	}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2962
}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2963
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2964
static void IndustrytileMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount)
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2965
{
7736
1119c5e38774 (svn r10521) -Fix: some NewGRFs did not check whether the newindustries bit was set, which breaks with a not-yet-finished-implementation of newindustries.
rubidium
parents: 7729
diff changeset
  2966
	if (!HASBIT(_ttdpatch_flags[3], 0x07)) return;
1119c5e38774 (svn r10521) -Fix: some NewGRFs did not check whether the newindustries bit was set, which breaks with a not-yet-finished-implementation of newindustries.
rubidium
parents: 7729
diff changeset
  2967
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2968
	byte *bp = &buf[4 + idcount + cidcount * 3];
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2969
	uint16 groupid = grf_load_word(&bp);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2970
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2971
	if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2972
		grfmsg(1, "IndustrytileMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping.",
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2973
		       groupid, _cur_grffile->spritegroups_count);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2974
		return;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2975
	}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2976
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2977
	for (uint i = 0; i < idcount; i++) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2978
		uint8 id = buf[3 + i];
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2979
		IndustryTileSpec *indtsp = _cur_grffile->indtspec[id];
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2980
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2981
		if (indtsp == NULL) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2982
			grfmsg(1, "IndustrytileMapSpriteGroup: Too many industry tiles defined, skipping");
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2983
			return;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2984
		}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2985
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2986
		indtsp->grf_prop.spritegroup = _cur_grffile->spritegroups[groupid];
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2987
	}
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  2988
}
6691
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  2989
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  2990
static void CargoMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount)
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  2991
{
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  2992
	byte *bp = &buf[4 + idcount + cidcount * 3];
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  2993
	uint16 groupid = grf_load_word(&bp);
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  2994
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  2995
	if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  2996
		grfmsg(1, "CargoMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping.",
6691
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  2997
		       groupid, _cur_grffile->spritegroups_count);
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  2998
		return;
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  2999
	}
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3000
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3001
	for (uint i = 0; i < idcount; i++) {
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3002
		CargoID cid = buf[3 + i];
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3003
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3004
		if (cid >= NUM_CARGO) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  3005
			grfmsg(1, "CargoMapSpriteGroup: Cargo ID %d out of range, skipping");
6691
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3006
			continue;
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3007
		}
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3008
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3009
		CargoSpec *cs = &_cargo[cid];
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3010
		cs->grfid = _cur_grffile->grfid;
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3011
		cs->group = _cur_grffile->spritegroups[groupid];
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3012
	}
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3013
}
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3014
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3015
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3016
/* Action 0x03 */
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3017
static void FeatureMapSpriteGroup(byte *buf, int len)
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3018
{
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3019
	/* <03> <feature> <n-id> <ids>... <num-cid> [<cargo-type> <cid>]... <def-cid>
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3020
	 * id-list    := [<id>] [id-list]
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3021
	 * cargo-list := <cargo-type> <cid> [cargo-list]
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3022
	 *
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3023
	 * B feature       see action 0
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3024
	 * B n-id          bits 0-6: how many IDs this definition applies to
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3025
	 *                 bit 7: if set, this is a wagon override definition (see below)
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3026
	 * B ids           the IDs for which this definition applies
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3027
	 * B num-cid       number of cargo IDs (sprite group IDs) in this definition
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3028
	 *                 can be zero, in that case the def-cid is used always
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3029
	 * B cargo-type    type of this cargo type (e.g. mail=2, wood=7, see below)
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3030
	 * W cid           cargo ID (sprite group ID) for this type of cargo
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3031
	 * W def-cid       default cargo ID (sprite group ID) */
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3032
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3033
	if (!check_length(len, 6, "FeatureMapSpriteGroup")) return;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3034
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3035
	uint8 feature = buf[1];
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3036
	uint8 idcount = buf[2] & 0x7F;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3037
	bool wagover = (buf[2] & 0x80) == 0x80;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3038
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3039
	if (!check_length(len, 3 + idcount, "FeatureMapSpriteGroup")) return;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3040
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3041
	/* If idcount is zero, this is a feature callback */
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3042
	if (idcount == 0) {
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3043
		grfmsg(2, "FeatureMapSpriteGroup: Feature callbacks not implemented yet");
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3044
		return;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3045
	}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3046
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3047
	uint8 cidcount = buf[3 + idcount];
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3048
	if (!check_length(len, 4 + idcount + cidcount * 3, "FeatureMapSpriteGroup")) return;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3049
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3050
	grfmsg(6, "FeatureMapSpriteGroup: Feature %d, %d ids, %d cids, wagon override %d",
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3051
			feature, idcount, cidcount, wagover);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3052
8116
1e04799d8544 (svn r11150) -Fix [FS#1202]: NewGRF action 3 does not necessarily need an action 1 to be defined. Patch by frosch.
rubidium
parents: 8111
diff changeset
  3053
	if (_cur_grffile->spritegroups == 0) {
1e04799d8544 (svn r11150) -Fix [FS#1202]: NewGRF action 3 does not necessarily need an action 1 to be defined. Patch by frosch.
rubidium
parents: 8111
diff changeset
  3054
		grfmsg(1, "FeatureMapSpriteGroup: No sprite groups to work on! Skipping");
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3055
		return;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3056
	}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3057
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3058
	switch (feature) {
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3059
		case GSF_TRAIN:
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3060
		case GSF_ROAD:
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3061
		case GSF_SHIP:
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3062
		case GSF_AIRCRAFT:
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3063
			VehicleMapSpriteGroup(buf, feature, idcount, cidcount, wagover);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3064
			return;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3065
7079
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  3066
		case GSF_CANAL:
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  3067
			CanalMapSpriteGroup(buf, idcount, cidcount);
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  3068
			return;
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  3069
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3070
		case GSF_STATION:
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3071
			StationMapSpriteGroup(buf, idcount, cidcount);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3072
			return;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3073
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3074
		case GSF_TOWNHOUSE:
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3075
			TownHouseMapSpriteGroup(buf, idcount, cidcount);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3076
			return;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3077
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  3078
		case GSF_INDUSTRIES:
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  3079
			IndustryMapSpriteGroup(buf, idcount, cidcount);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  3080
			return;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  3081
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  3082
		case GSF_INDUSTRYTILES:
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  3083
			IndustrytileMapSpriteGroup(buf, idcount, cidcount);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  3084
			return;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  3085
6691
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3086
		case GSF_CARGOS:
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3087
			CargoMapSpriteGroup(buf, idcount, cidcount);
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3088
			return;
e8c27a509894 (svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
peter1138
parents: 6689
diff changeset
  3089
6689
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3090
		default:
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3091
			grfmsg(1, "FeatureMapSpriteGroup: Unsupported feature %d, skipping", feature);
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3092
			return;
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3093
	}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3094
}
dc89785a5bee (svn r9416) -Codechange: Split NewGRF Action 3 handler into separate functions for each feature (vehicles are common, though)
peter1138
parents: 6687
diff changeset
  3095
356
e3721e481b38 (svn r544) -newgrf: codechange for better handling (pasky and octo__)
celestar
parents: 193
diff changeset
  3096
/* Action 0x04 */
3879
3e9cd6403d73 (svn r4928) CodeChange : Rename functions referring to "Vehicle" for "Feature".
belugas
parents: 3875
diff changeset
  3097
static void FeatureNewName(byte *buf, int len)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3098
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3099
	/* <04> <veh-type> <language-id> <num-veh> <offset> <data...>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3100
	 *
3601
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3101
	 * B veh-type      see action 0 (as 00..07, + 0A
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3102
	 *                 But IF veh-type = 48, then generic text
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3103
	 * B language-id   If bit 6 is set, This is the extended language scheme,
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3104
	                   with up to 64 language.
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3105
	                   Otherwise, it is a mapping where set bits have meaning
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3106
	                   0 = american, 1 = english, 2 = german, 3 = french, 4 = spanish
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3107
	                   Bit 7 set means this is a generic text, not a vehicle one (or else)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3108
	 * B num-veh       number of vehicles which are getting a new name
2346
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
  3109
	 * B/W offset      number of the first vehicle that gets a new name
3601
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3110
	 *                 Byte : ID of vehicle to change
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3111
	 *                 Word : ID of string to change/add
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3112
	 * S data          new texts, each of them zero-terminated, after
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3113
	 *                 which the next name begins. */
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3114
3643
5d1f3fe61036 (svn r4552) - NewGRF: fix braino... in r4550, new_scheme should true when the version is 7 or higher, not less than 7...
peter1138
parents: 3642
diff changeset
  3115
	bool new_scheme = _cur_grffile->grf_version >= 7;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3116
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  3117
	if (!check_length(len, 6, "FeatureNewName")) return;
2346
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
  3118
	buf++;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3119
	uint8 feature  = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3120
	uint8 lang     = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3121
	uint8 num      = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3122
	bool generic   = HASBIT(lang, 7);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3123
	uint16 id      = generic ? grf_load_word(&buf) : grf_load_byte(&buf);
4992
6d0a80c5c654 (svn r6995) - Codechange: NewGRF; strip bit 7 of the language ID earlier and handle handle a language ID of 0x7F as the preferred default language.
peter1138
parents: 4964
diff changeset
  3124
6d0a80c5c654 (svn r6995) - Codechange: NewGRF; strip bit 7 of the language ID earlier and handle handle a language ID of 0x7F as the preferred default language.
peter1138
parents: 4964
diff changeset
  3125
	CLRBIT(lang, 7);
2346
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
  3126
3760
10a6f762e754 (svn r4751) - NewGRF: when assigning new texts, ignore the feature byte as some sets use generic feature always. Also, don't add vehicle id shifts if the vehicle id is out of range.
peter1138
parents: 3750
diff changeset
  3127
	if (feature <= GSF_AIRCRAFT && id < _vehcounts[feature]) {
3601
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3128
		id += _vehshifts[feature];
2346
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
  3129
	}
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3130
	uint16 endid = id + num;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3131
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  3132
	grfmsg(6, "FeatureNewName: About to rename engines %d..%d (feature %d) in language 0x%02X",
379
4605aa187b18 (svn r568) -newgrf: Make @wagover bool, simplifying stuff. (pasky)
celestar
parents: 378
diff changeset
  3133
	               id, endid, feature, lang);
4605aa187b18 (svn r568) -newgrf: Make @wagover bool, simplifying stuff. (pasky)
celestar
parents: 378
diff changeset
  3134
4992
6d0a80c5c654 (svn r6995) - Codechange: NewGRF; strip bit 7 of the language ID earlier and handle handle a language ID of 0x7F as the preferred default language.
peter1138
parents: 4964
diff changeset
  3135
	len -= generic ? 6 : 5;
6d0a80c5c654 (svn r6995) - Codechange: NewGRF; strip bit 7 of the language ID earlier and handle handle a language ID of 0x7F as the preferred default language.
peter1138
parents: 4964
diff changeset
  3136
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  3137
	for (; id < endid && len > 0; id++) {
6416
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
  3138
		const char *name   = grf_load_string(&buf, len);
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
  3139
		size_t name_length = strlen(name) + 1;
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
  3140
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
  3141
		len -= (int)name_length;
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
  3142
7103
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3143
		grfmsg(8, "FeatureNewName: 0x%04X <- %s", id, name);
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3144
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3145
		switch (feature) {
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3146
			case GSF_TRAIN:
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3147
			case GSF_ROAD:
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3148
			case GSF_SHIP:
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3149
			case GSF_AIRCRAFT:
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3150
				if (id < TOTAL_NUM_ENGINES) {
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3151
					StringID string = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_8000_KIRBY_PAUL_TANK_STEAM + id);
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3152
					SetCustomEngineName(id, string);
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3153
				} else {
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3154
					AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, id);
3614
2c75299f54bd (svn r4510) - NewGRF bounds checking:
peter1138
parents: 3604
diff changeset
  3155
				}
7103
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3156
				break;
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3157
7678
8c61d49f4447 (svn r10456) -Codechange: Enable loading newgrf strings for Industries
belugas
parents: 7670
diff changeset
  3158
			case GSF_INDUSTRIES: {
8c61d49f4447 (svn r10456) -Codechange: Enable loading newgrf strings for Industries
belugas
parents: 7670
diff changeset
  3159
				AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
8c61d49f4447 (svn r10456) -Codechange: Enable loading newgrf strings for Industries
belugas
parents: 7670
diff changeset
  3160
				break;
8c61d49f4447 (svn r10456) -Codechange: Enable loading newgrf strings for Industries
belugas
parents: 7670
diff changeset
  3161
			}
8c61d49f4447 (svn r10456) -Codechange: Enable loading newgrf strings for Industries
belugas
parents: 7670
diff changeset
  3162
7103
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3163
			case GSF_TOWNHOUSE:
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3164
			default:
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3165
				switch (GB(id, 8, 8)) {
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3166
					case 0xC4: // Station class name
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3167
						if (_cur_grffile->stations == NULL || _cur_grffile->stations[GB(id, 0, 8)] == NULL) {
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3168
							grfmsg(1, "FeatureNewName: Attempt to name undefined station 0x%X, ignoring", GB(id, 0, 8));
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3169
						} else {
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3170
							StationClassID sclass = _cur_grffile->stations[GB(id, 0, 8)]->sclass;
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3171
							SetStationClassName(sclass, AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED));
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  3172
						}
7103
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3173
						break;
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3174
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3175
					case 0xC5: // Station name
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3176
						if (_cur_grffile->stations == NULL || _cur_grffile->stations[GB(id, 0, 8)] == NULL) {
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3177
							grfmsg(1, "FeatureNewName: Attempt to name undefined station 0x%X, ignoring", GB(id, 0, 8));
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3178
						} else {
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3179
							_cur_grffile->stations[GB(id, 0, 8)]->name = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3180
						}
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3181
						break;
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3182
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3183
					case 0xC9: // House name
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3184
						if (_cur_grffile->housespec == NULL || _cur_grffile->housespec[GB(id, 0, 8)] == NULL) {
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3185
							grfmsg(1, "FeatureNewName: Attempt to name undefined house 0x%X, ignoring.", GB(id, 0, 8));
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3186
						} else {
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3187
							_cur_grffile->housespec[GB(id, 0, 8)]->building_name = AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3188
						}
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3189
						break;
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3190
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3191
					case 0xD0:
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3192
					case 0xDC:
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3193
						AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED);
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3194
						break;
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3195
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3196
					default:
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3197
						grfmsg(7, "FeatureNewName: Unsupported ID (0x%04X)", id);
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3198
						break;
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3199
				}
8c91ce192058 (svn r9827) -Codechange/Fix: [NewGRF] Text strings of 1 character are perfectly valid... (fixes dbsetxl refits again...)
peter1138
parents: 7102
diff changeset
  3200
				break;
3642
a247e07fafdf (svn r4551) - NewGRF: add string handling for newstations.
peter1138
parents: 3641
diff changeset
  3201
a247e07fafdf (svn r4551) - NewGRF: add string handling for newstations.
peter1138
parents: 3641
diff changeset
  3202
#if 0
3601
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3203
				case GSF_CANAL :
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3204
				case GSF_BRIDGE :
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3205
					AddGRFString(_cur_spriteid, id, lang, name);
6987
b0f13039bda2 (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6977
diff changeset
  3206
					switch (GB(id, 8, 8)) {
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3207
						case 0xC9: // House name
3601
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3208
						default:
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  3209
							grfmsg(7, "FeatureNewName: Unsupported ID (0x%04X)", id);
3601
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3210
					}
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3211
					break;
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3212
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3213
				default :
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  3214
					grfmsg(7, "FeatureNewName: Unsupported feature (0x%02X)", feature);
3601
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3215
					break;
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  3216
#endif
379
4605aa187b18 (svn r568) -newgrf: Make @wagover bool, simplifying stuff. (pasky)
celestar
parents: 378
diff changeset
  3217
		}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3218
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3219
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3220
356
e3721e481b38 (svn r544) -newgrf: codechange for better handling (pasky and octo__)
celestar
parents: 193
diff changeset
  3221
/* Action 0x05 */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3222
static void GraphicsNew(byte *buf, int len)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3223
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3224
	/* <05> <graphics-type> <num-sprites> <other data...>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3225
	 *
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3226
	 * B graphics-type What set of graphics the sprites define.
2346
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
  3227
	 * E num-sprites   How many sprites are in this set?
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3228
	 * V other data    Graphics type specific data.  Currently unused. */
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3229
	/* TODO */
356
e3721e481b38 (svn r544) -newgrf: codechange for better handling (pasky and octo__)
celestar
parents: 193
diff changeset
  3230
3708
1c548218151c (svn r4651) - NewGRF: support loading of catenary sprites from NewGRF files. This actually works by replacing our hardcoded sprites.
peter1138
parents: 3707
diff changeset
  3231
	SpriteID replace = 0;
356
e3721e481b38 (svn r544) -newgrf: codechange for better handling (pasky and octo__)
celestar
parents: 193
diff changeset
  3232
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  3233
	if (!check_length(len, 2, "GraphicsNew")) return;
2346
7e88b66abdbd (svn r2872) -Feature: [NewGRF] Add support for "extended bytes"
tron
parents: 2345
diff changeset
  3234
	buf++;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3235
	uint8 type = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3236
	uint16 num = grf_load_extended(&buf);
356
e3721e481b38 (svn r544) -newgrf: codechange for better handling (pasky and octo__)
celestar
parents: 193
diff changeset
  3237
3638
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3238
	switch (type) {
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3239
		case 0x04: // Signal graphics
3638
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3240
			if (num != 112 && num != 240) {
6965
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3241
				grfmsg(1, "GraphicsNew: Signal graphics sprite count must be 112 or 240, skipping");
3638
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3242
				return;
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3243
			}
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3244
			_signal_base = _cur_spriteid;
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3245
			break;
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3246
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3247
		case 0x05: // Catenary graphics
3708
1c548218151c (svn r4651) - NewGRF: support loading of catenary sprites from NewGRF files. This actually works by replacing our hardcoded sprites.
peter1138
parents: 3707
diff changeset
  3248
			if (num != 48) {
6965
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3249
				grfmsg(1, "GraphicsNew: Catenary graphics sprite count must be 48, skipping");
3708
1c548218151c (svn r4651) - NewGRF: support loading of catenary sprites from NewGRF files. This actually works by replacing our hardcoded sprites.
peter1138
parents: 3707
diff changeset
  3250
				return;
1c548218151c (svn r4651) - NewGRF: support loading of catenary sprites from NewGRF files. This actually works by replacing our hardcoded sprites.
peter1138
parents: 3707
diff changeset
  3251
			}
1c548218151c (svn r4651) - NewGRF: support loading of catenary sprites from NewGRF files. This actually works by replacing our hardcoded sprites.
peter1138
parents: 3707
diff changeset
  3252
			replace = SPR_ELRAIL_BASE + 3;
1c548218151c (svn r4651) - NewGRF: support loading of catenary sprites from NewGRF files. This actually works by replacing our hardcoded sprites.
peter1138
parents: 3707
diff changeset
  3253
			break;
1c548218151c (svn r4651) - NewGRF: support loading of catenary sprites from NewGRF files. This actually works by replacing our hardcoded sprites.
peter1138
parents: 3707
diff changeset
  3254
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3255
		case 0x06: // Foundations
3709
be60bcc248bc (svn r4652) - NewGRF: support loading of foundation and canal graphics from NewGRF files via action 5
peter1138
parents: 3708
diff changeset
  3256
			if (num != 74) {
6965
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3257
				grfmsg(1, "GraphicsNew: Foundation graphics sprite count must be 74, skipping");
3709
be60bcc248bc (svn r4652) - NewGRF: support loading of foundation and canal graphics from NewGRF files via action 5
peter1138
parents: 3708
diff changeset
  3258
				return;
be60bcc248bc (svn r4652) - NewGRF: support loading of foundation and canal graphics from NewGRF files via action 5
peter1138
parents: 3708
diff changeset
  3259
			}
be60bcc248bc (svn r4652) - NewGRF: support loading of foundation and canal graphics from NewGRF files via action 5
peter1138
parents: 3708
diff changeset
  3260
			replace = SPR_SLOPES_BASE;
be60bcc248bc (svn r4652) - NewGRF: support loading of foundation and canal graphics from NewGRF files via action 5
peter1138
parents: 3708
diff changeset
  3261
			break;
be60bcc248bc (svn r4652) - NewGRF: support loading of foundation and canal graphics from NewGRF files via action 5
peter1138
parents: 3708
diff changeset
  3262
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3263
		case 0x08: // Canal graphics
3709
be60bcc248bc (svn r4652) - NewGRF: support loading of foundation and canal graphics from NewGRF files via action 5
peter1138
parents: 3708
diff changeset
  3264
			if (num != 65) {
6965
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3265
				grfmsg(1, "GraphicsNew: Canal graphics sprite count must be 65, skipping");
3709
be60bcc248bc (svn r4652) - NewGRF: support loading of foundation and canal graphics from NewGRF files via action 5
peter1138
parents: 3708
diff changeset
  3266
				return;
be60bcc248bc (svn r4652) - NewGRF: support loading of foundation and canal graphics from NewGRF files via action 5
peter1138
parents: 3708
diff changeset
  3267
			}
be60bcc248bc (svn r4652) - NewGRF: support loading of foundation and canal graphics from NewGRF files via action 5
peter1138
parents: 3708
diff changeset
  3268
			replace = SPR_CANALS_BASE + 5;
be60bcc248bc (svn r4652) - NewGRF: support loading of foundation and canal graphics from NewGRF files via action 5
peter1138
parents: 3708
diff changeset
  3269
			break;
be60bcc248bc (svn r4652) - NewGRF: support loading of foundation and canal graphics from NewGRF files via action 5
peter1138
parents: 3708
diff changeset
  3270
7260
23cd58b6bf51 (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents: 7255
diff changeset
  3271
		case 0x09: // One way graphics
23cd58b6bf51 (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents: 7255
diff changeset
  3272
			if (num != 6) {
23cd58b6bf51 (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents: 7255
diff changeset
  3273
				grfmsg(1, "GraphicsNew: One way road graphics sprite count must be 6, skipping");
23cd58b6bf51 (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents: 7255
diff changeset
  3274
				return;
23cd58b6bf51 (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents: 7255
diff changeset
  3275
			}
23cd58b6bf51 (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents: 7255
diff changeset
  3276
			replace = SPR_ONEWAY_BASE;
23cd58b6bf51 (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents: 7255
diff changeset
  3277
			break;
23cd58b6bf51 (svn r9999) -Feature: make it possible to disallow busses and lorries to go a specific way on straight pieces of road.
rubidium
parents: 7255
diff changeset
  3278
6965
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3279
		case 0x0A: // 2CC colour maps
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3280
			if (num != 256) {
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3281
				grfmsg(1, "GraphicsNew: 2CC colour maps sprite count must be 256, skipping");
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3282
				return;
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3283
			}
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3284
			replace = SPR_2CCMAP_BASE;
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3285
			break;
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3286
7187
f7dc3204d457 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents: 7182
diff changeset
  3287
		case 0x0B: // tramways
f7dc3204d457 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents: 7182
diff changeset
  3288
			if (num != 113) {
7301
0e314c60f7a0 (svn r10044) -Fix: Minor NewGRF debug message fixes, and skip sprites of an unsupported Action 5 feature.
peter1138
parents: 7277
diff changeset
  3289
				grfmsg(1, "GraphicsNew: Tramway graphics sprite count must be 113, skipping");
7187
f7dc3204d457 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents: 7182
diff changeset
  3290
				return;
f7dc3204d457 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents: 7182
diff changeset
  3291
			}
f7dc3204d457 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents: 7182
diff changeset
  3292
			replace = SPR_TRAMWAY_BASE;
f7dc3204d457 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents: 7182
diff changeset
  3293
			break;
f7dc3204d457 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents: 7182
diff changeset
  3294
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3295
		case 0x0D: // Coast graphics
5210
dc52acfad05c (svn r7325) -Feature: Add support for action 5 type 0x0D, coast sprites.
peter1138
parents: 5209
diff changeset
  3296
			if (num != 16) {
6965
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3297
				grfmsg(1, "GraphicsNew: Coast graphics sprite count must be 16, skipping");
5210
dc52acfad05c (svn r7325) -Feature: Add support for action 5 type 0x0D, coast sprites.
peter1138
parents: 5209
diff changeset
  3298
				return;
dc52acfad05c (svn r7325) -Feature: Add support for action 5 type 0x0D, coast sprites.
peter1138
parents: 5209
diff changeset
  3299
			}
dc52acfad05c (svn r7325) -Feature: Add support for action 5 type 0x0D, coast sprites.
peter1138
parents: 5209
diff changeset
  3300
			_coast_base = _cur_spriteid;
dc52acfad05c (svn r7325) -Feature: Add support for action 5 type 0x0D, coast sprites.
peter1138
parents: 5209
diff changeset
  3301
			break;
dc52acfad05c (svn r7325) -Feature: Add support for action 5 type 0x0D, coast sprites.
peter1138
parents: 5209
diff changeset
  3302
6965
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3303
		case 0x10: // New airport sprites
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3304
			if (num != 15) {
6966
36e5b929e727 (svn r9646) -Fix (r9645): incorrect count in error message for airport graphics
peter1138
parents: 6965
diff changeset
  3305
				grfmsg(1, "GraphicsNew: Airport graphics sprite count must be 15, skipping");
6965
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3306
				return;
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3307
			}
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3308
			replace = SPR_AIRPORTX_BASE;
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3309
			break;
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3310
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3311
		case 0x11: // Road stop sprites
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3312
			if (num != 8) {
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3313
				grfmsg(1, "GraphicsNew: Road stop graphics sprite count must be 8, skipping");
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3314
				return;
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3315
			}
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3316
			replace = SPR_ROADSTOP_BASE;
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3317
			break;
00e1d670295a (svn r9645) -Feature: Add NewGRF Action 5 (Sprite Replacement) support for 2cc colour maps, airport, and road stop sprites.
peter1138
parents: 6959
diff changeset
  3318
3638
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3319
		default:
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  3320
			grfmsg(2, "GraphicsNew: Custom graphics (type 0x%02X) sprite block of length %u (unimplemented, ignoring)",
3638
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3321
					type, num);
7301
0e314c60f7a0 (svn r10044) -Fix: Minor NewGRF debug message fixes, and skip sprites of an unsupported Action 5 feature.
peter1138
parents: 7277
diff changeset
  3322
			_skip_sprites = num;
3638
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3323
			return;
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3324
	}
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3325
3708
1c548218151c (svn r4651) - NewGRF: support loading of catenary sprites from NewGRF files. This actually works by replacing our hardcoded sprites.
peter1138
parents: 3707
diff changeset
  3326
	if (replace == 0) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  3327
		grfmsg(2, "GraphicsNew: Loading %u sprites of type 0x%02X at SpriteID 0x%04X", num, type, _cur_spriteid);
3708
1c548218151c (svn r4651) - NewGRF: support loading of catenary sprites from NewGRF files. This actually works by replacing our hardcoded sprites.
peter1138
parents: 3707
diff changeset
  3328
	} else {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  3329
		grfmsg(2, "GraphicsNew: Replacing %u sprites of type 0x%02X at SpriteID 0x%04X", num, type, replace);
3708
1c548218151c (svn r4651) - NewGRF: support loading of catenary sprites from NewGRF files. This actually works by replacing our hardcoded sprites.
peter1138
parents: 3707
diff changeset
  3330
	}
3638
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3331
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3332
	for (; num > 0; num--) {
7404
fc0559157f16 (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: 7390
diff changeset
  3333
		LoadNextSprite(replace == 0 ? _cur_spriteid++ : replace++, _file_index, _nfo_line);
3638
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3334
		_nfo_line++;
6e0b43d905d4 (svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
peter1138
parents: 3635
diff changeset
  3335
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3336
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3337
7025
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3338
/* Action 0x05 (SKIP) */
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3339
static void SkipAct5(byte *buf, int len)
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3340
{
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3341
	if (!check_length(len, 2, "SkipAct5")) return;
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3342
	buf++;
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3343
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3344
	/* Ignore type byte */
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3345
	grf_load_byte(&buf);
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3346
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3347
	/* Skip the sprites of this action */
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3348
	_skip_sprites = grf_load_extended(&buf);
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3349
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3350
	grfmsg(3, "SkipAct5: Skipping %d sprites", _skip_sprites);
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3351
}
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3352
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3353
static uint32 GetParamVal(byte param, uint32 *cond_val)
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3354
{
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3355
	switch (param) {
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3356
		case 0x81: // current year
5340
82c981816fcb (svn r7506) -Codechange: [NewGRF] Add action 7/9/D variable 0x81 (current year)
glx
parents: 5338
diff changeset
  3357
			return clamp(_cur_year, ORIGINAL_BASE_YEAR, ORIGINAL_MAX_YEAR) - ORIGINAL_BASE_YEAR;
82c981816fcb (svn r7506) -Codechange: [NewGRF] Add action 7/9/D variable 0x81 (current year)
glx
parents: 5338
diff changeset
  3358
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3359
		case 0x83: // current climate, 0=temp, 1=arctic, 2=trop, 3=toyland
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3360
			return _opt.landscape;
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3361
7309
bc9f31c4ab97 (svn r10052) -Codechange: Support reserve/activate stage bits of action 7/9 variable 84.
peter1138
parents: 7302
diff changeset
  3362
		case 0x84: { // GRF loading stage
bc9f31c4ab97 (svn r10052) -Codechange: Support reserve/activate stage bits of action 7/9 variable 84.
peter1138
parents: 7302
diff changeset
  3363
			uint32 res = 0;
bc9f31c4ab97 (svn r10052) -Codechange: Support reserve/activate stage bits of action 7/9 variable 84.
peter1138
parents: 7302
diff changeset
  3364
bc9f31c4ab97 (svn r10052) -Codechange: Support reserve/activate stage bits of action 7/9 variable 84.
peter1138
parents: 7302
diff changeset
  3365
			if (_cur_stage > GLS_INIT) SETBIT(res, 0);
bc9f31c4ab97 (svn r10052) -Codechange: Support reserve/activate stage bits of action 7/9 variable 84.
peter1138
parents: 7302
diff changeset
  3366
			if (_cur_stage == GLS_RESERVE) SETBIT(res, 8);
bc9f31c4ab97 (svn r10052) -Codechange: Support reserve/activate stage bits of action 7/9 variable 84.
peter1138
parents: 7302
diff changeset
  3367
			if (_cur_stage == GLS_ACTIVATION) SETBIT(res, 9);
bc9f31c4ab97 (svn r10052) -Codechange: Support reserve/activate stage bits of action 7/9 variable 84.
peter1138
parents: 7302
diff changeset
  3368
			return res;
bc9f31c4ab97 (svn r10052) -Codechange: Support reserve/activate stage bits of action 7/9 variable 84.
peter1138
parents: 7302
diff changeset
  3369
		}
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3370
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3371
		case 0x85: // TTDPatch flags, only for bit tests
3811
7324eb563ae0 (svn r4821) - NewGRF: simplify parameter retrieval in Action 0x0D
peter1138
parents: 3808
diff changeset
  3372
			if (cond_val == NULL) {
7324eb563ae0 (svn r4821) - NewGRF: simplify parameter retrieval in Action 0x0D
peter1138
parents: 3808
diff changeset
  3373
				/* Supported in Action 0x07 and 0x09, not 0x0D */
7324eb563ae0 (svn r4821) - NewGRF: simplify parameter retrieval in Action 0x0D
peter1138
parents: 3808
diff changeset
  3374
				return 0;
7324eb563ae0 (svn r4821) - NewGRF: simplify parameter retrieval in Action 0x0D
peter1138
parents: 3808
diff changeset
  3375
			} else {
7324eb563ae0 (svn r4821) - NewGRF: simplify parameter retrieval in Action 0x0D
peter1138
parents: 3808
diff changeset
  3376
				uint32 param_val = _ttdpatch_flags[*cond_val / 0x20];
7324eb563ae0 (svn r4821) - NewGRF: simplify parameter retrieval in Action 0x0D
peter1138
parents: 3808
diff changeset
  3377
				*cond_val %= 0x20;
7324eb563ae0 (svn r4821) - NewGRF: simplify parameter retrieval in Action 0x0D
peter1138
parents: 3808
diff changeset
  3378
				return param_val;
7324eb563ae0 (svn r4821) - NewGRF: simplify parameter retrieval in Action 0x0D
peter1138
parents: 3808
diff changeset
  3379
			}
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3380
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3381
		case 0x86: // road traffic side, bit 4 clear=left, set=right
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3382
			return _opt.road_side << 4;
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3383
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3384
		case 0x88: // GRF ID check
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3385
			return 0;
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3386
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3387
		case 0x8B: { // TTDPatch version
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3388
			uint major    = 2;
4993
7d84a318e3a4 (svn r6996) - Codechange: Pretend to be the current version of TTDPatch. This value doesn't anything to us as we don't follow TTDPatch's development timeline...
peter1138
parents: 4992
diff changeset
  3389
			uint minor    = 6;
7d84a318e3a4 (svn r6996) - Codechange: Pretend to be the current version of TTDPatch. This value doesn't anything to us as we don't follow TTDPatch's development timeline...
peter1138
parents: 4992
diff changeset
  3390
			uint revision = 0; // special case: 2.0.1 is 2.0.10
7081
279d45234afe (svn r9799) -Codechange: separate engine class and engine running cost class (mart3p).
rubidium
parents: 7079
diff changeset
  3391
			uint build    = 1210;
4993
7d84a318e3a4 (svn r6996) - Codechange: Pretend to be the current version of TTDPatch. This value doesn't anything to us as we don't follow TTDPatch's development timeline...
peter1138
parents: 4992
diff changeset
  3392
			return (major << 24) | (minor << 20) | (revision << 16) | build;
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3393
		}
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3394
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3395
		case 0x8D: // TTD Version, 00=DOS, 01=Windows
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3396
			return !_use_dos_palette;
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3397
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3398
		case 0x8E: // Y-offset for train sprites
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3399
			return _traininfo_vehicle_pitch;
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3400
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3401
		case 0x92: // Game mode
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3402
			return _game_mode;
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3403
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3404
		case 0x9A: // Always -1
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
  3405
			return UINT_MAX;
5287
94a6c3c924b2 (svn r7436) -Codechange: Add action7/9/D variable 0x9A (-1)
peter1138
parents: 5234
diff changeset
  3406
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3407
		case 0x9D: // TTD Platform, 00=TTDPatch, 01=OpenTTD
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3408
			return 1;
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3409
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3410
		case 0x9E: // Miscellaneous GRF features
3814
d0b901dfc313 (svn r4824) - NewGRF: add support for getting/setting miscellaneous grf flags (param 0x9E)
peter1138
parents: 3811
diff changeset
  3411
			return _misc_grf_features;
d0b901dfc313 (svn r4824) - NewGRF: add support for getting/setting miscellaneous grf flags (param 0x9E)
peter1138
parents: 3811
diff changeset
  3412
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3413
		default:
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3414
			/* GRF Parameter */
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3415
			if (param < 0x80) return _cur_grffile->param[param];
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3416
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3417
			/* In-game variable. */
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  3418
			grfmsg(1, "Unsupported in-game variable 0x%02X", param);
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
  3419
			return UINT_MAX;
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3420
	}
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3421
}
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3422
3895
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3423
/* Action 0x06 */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3424
static void CfgApply(byte *buf, int len)
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3425
{
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3426
	/* <06> <param-num> <param-size> <offset> ... <FF>
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3427
	 *
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3428
	 * B param-num     Number of parameter to substitute (First = "zero")
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3429
	 *                 Ignored if that parameter was not specified in newgrf.cfg
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3430
	 * B param-size    How many bytes to replace.  If larger than 4, the
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3431
	 *                 bytes of the following parameter are used.  In that
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3432
	 *                 case, nothing is applied unless *all* parameters
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3433
	 *                 were specified.
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3434
	 * B offset        Offset into data from beginning of next sprite
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3435
	 *                 to place where parameter is to be stored. */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3436
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3437
	/* Preload the next sprite */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3438
	uint32 pos = FioGetPos();
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3439
	uint16 num = FioReadWord();
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3440
	uint8 type = FioReadByte();
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3441
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3442
	/* Check if the sprite is a pseudo sprite. We can't operate on real sprites. */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3443
	if (type == 0xFF) {
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  3444
		_preload_sprite = MallocT<byte>(num);
3895
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3445
		FioReadBlock(_preload_sprite, num);
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3446
	}
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3447
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3448
	/* Reset the file position to the start of the next sprite */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3449
	FioSeekTo(pos, SEEK_SET);
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3450
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3451
	if (type != 0xFF) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  3452
		grfmsg(2, "CfgApply: Ignoring (next sprite is real, unsupported)");
3895
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3453
		return;
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3454
	}
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3455
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3456
	/* Now perform the Action 0x06 on our data. */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3457
	buf++;
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3458
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3459
	for (;;) {
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3460
		uint i;
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3461
		uint param_num;
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3462
		uint param_size;
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3463
		uint offset;
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3464
		bool add_value;
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3465
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3466
		/* Read the parameter to apply. 0xFF indicates no more data to change. */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3467
		param_num = grf_load_byte(&buf);
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3468
		if (param_num == 0xFF) break;
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3469
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3470
		/* Get the size of the parameter to use. If the size covers multiple
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3471
		 * double words, sequential parameter values are used. */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3472
		param_size = grf_load_byte(&buf);
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3473
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3474
		/* Bit 7 of param_size indicates we should add to the original value
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3475
		 * instead of replacing it. */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3476
		add_value  = HASBIT(param_size, 7);
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3477
		param_size = GB(param_size, 0, 7);
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3478
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3479
		/* Where to apply the data to within the pseudo sprite data. */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3480
		offset     = grf_load_extended(&buf);
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3481
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3482
		/* If the parameter is a GRF parameter (not an internal variable) check
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3483
		 * if it (and all further sequential parameters) has been defined. */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3484
		if (param_num < 0x80 && (param_num + (param_size - 1) / 4) >= _cur_grffile->param_end) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  3485
			grfmsg(2, "CfgApply: Ignoring (param %d not set)", (param_num + (param_size - 1) / 4));
3895
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3486
			break;
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3487
		}
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3488
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  3489
		grfmsg(8, "CfgApply: Applying %u bytes from parameter 0x%02X at offset 0x%04X", param_size, param_num, offset);
3895
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3490
7148
8de751a801a8 (svn r9883) -Fix (r4965): [NewGRF] Check for overflow and carry over when adding to the existing value.
peter1138
parents: 7145
diff changeset
  3491
		bool carry = false;
3895
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3492
		for (i = 0; i < param_size; i++) {
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3493
			uint32 value = GetParamVal(param_num + i / 4, NULL);
7148
8de751a801a8 (svn r9883) -Fix (r4965): [NewGRF] Check for overflow and carry over when adding to the existing value.
peter1138
parents: 7145
diff changeset
  3494
			/* Reset carry flag for each iteration of the variable (only really
8de751a801a8 (svn r9883) -Fix (r4965): [NewGRF] Check for overflow and carry over when adding to the existing value.
peter1138
parents: 7145
diff changeset
  3495
			 * matters if param_size is greater than 4) */
8de751a801a8 (svn r9883) -Fix (r4965): [NewGRF] Check for overflow and carry over when adding to the existing value.
peter1138
parents: 7145
diff changeset
  3496
			if (i == 0) carry = false;
3895
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3497
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3498
			if (add_value) {
7148
8de751a801a8 (svn r9883) -Fix (r4965): [NewGRF] Check for overflow and carry over when adding to the existing value.
peter1138
parents: 7145
diff changeset
  3499
				uint new_value = _preload_sprite[offset + i] + GB(value, (i % 4) * 8, 8) + (carry ? 1 : 0);
8de751a801a8 (svn r9883) -Fix (r4965): [NewGRF] Check for overflow and carry over when adding to the existing value.
peter1138
parents: 7145
diff changeset
  3500
				_preload_sprite[offset + i] = GB(new_value, 0, 8);
8de751a801a8 (svn r9883) -Fix (r4965): [NewGRF] Check for overflow and carry over when adding to the existing value.
peter1138
parents: 7145
diff changeset
  3501
				/* Check if the addition overflowed */
8de751a801a8 (svn r9883) -Fix (r4965): [NewGRF] Check for overflow and carry over when adding to the existing value.
peter1138
parents: 7145
diff changeset
  3502
				carry = new_value >= 256;
3895
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3503
			} else {
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3504
				_preload_sprite[offset + i] = GB(value, (i % 4) * 8, 8);
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3505
			}
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3506
		}
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3507
	}
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3508
}
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  3509
356
e3721e481b38 (svn r544) -newgrf: codechange for better handling (pasky and octo__)
celestar
parents: 193
diff changeset
  3510
/* Action 0x07 */
e3721e481b38 (svn r544) -newgrf: codechange for better handling (pasky and octo__)
celestar
parents: 193
diff changeset
  3511
/* Action 0x09 */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3512
static void SkipIf(byte *buf, int len)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3513
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3514
	/* <07/09> <param-num> <param-size> <condition-type> <value> <num-sprites>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3515
	 *
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3516
	 * B param-num
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3517
	 * B param-size
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3518
	 * B condition-type
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3519
	 * V value
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3520
	 * B num-sprites */
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3521
	/* TODO: More params. More condition types. */
2336
48ace1344af0 (svn r2862) Return a proper version number, when testing the TTDPatch version in the SkipIf action. Pretend to be version 2.0.1 alpha 49 for now.
tron
parents: 2324
diff changeset
  3522
	uint32 cond_val = 0;
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3523
	uint32 mask = 0;
360
ff657281ae48 (svn r548) -newgrf: minor style changes, and application of boolean type
darkvater
parents: 359
diff changeset
  3524
	bool result;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3525
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  3526
	if (!check_length(len, 6, "SkipIf")) return;
3714
402f02b01241 (svn r4657) - NewGRF: use grf_load_byte() in favour of array accesses
peter1138
parents: 3712
diff changeset
  3527
	buf++;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3528
	uint8 param     = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3529
	uint8 paramsize = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3530
	uint8 condtype  = grf_load_byte(&buf);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3531
359
f0ee94d705ed (svn r547) -newgrf: Enhanced support for action 0x7 and 0x9 (skips). Killer mixture mixed from octo's patch and pasky's old patch (pasky & octo).
darkvater
parents: 357
diff changeset
  3532
	if (condtype < 2) {
1611
bf352a87ef51 (svn r2115) Spring cleaning, no functional changes
tron
parents: 1607
diff changeset
  3533
		/* Always 1 for bit tests, the given value should be ignored. */
359
f0ee94d705ed (svn r547) -newgrf: Enhanced support for action 0x7 and 0x9 (skips). Killer mixture mixed from octo's patch and pasky's old patch (pasky & octo).
darkvater
parents: 357
diff changeset
  3534
		paramsize = 1;
f0ee94d705ed (svn r547) -newgrf: Enhanced support for action 0x7 and 0x9 (skips). Killer mixture mixed from octo's patch and pasky's old patch (pasky & octo).
darkvater
parents: 357
diff changeset
  3535
	}
f0ee94d705ed (svn r547) -newgrf: Enhanced support for action 0x7 and 0x9 (skips). Killer mixture mixed from octo's patch and pasky's old patch (pasky & octo).
darkvater
parents: 357
diff changeset
  3536
1611
bf352a87ef51 (svn r2115) Spring cleaning, no functional changes
tron
parents: 1607
diff changeset
  3537
	switch (paramsize) {
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3538
		case 4: cond_val = grf_load_dword(&buf); mask = 0xFFFFFFFF; break;
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3539
		case 2: cond_val = grf_load_word(&buf);  mask = 0x0000FFFF; break;
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3540
		case 1: cond_val = grf_load_byte(&buf);  mask = 0x000000FF; break;
1611
bf352a87ef51 (svn r2115) Spring cleaning, no functional changes
tron
parents: 1607
diff changeset
  3541
		default: break;
bf352a87ef51 (svn r2115) Spring cleaning, no functional changes
tron
parents: 1607
diff changeset
  3542
	}
359
f0ee94d705ed (svn r547) -newgrf: Enhanced support for action 0x7 and 0x9 (skips). Killer mixture mixed from octo's patch and pasky's old patch (pasky & octo).
darkvater
parents: 357
diff changeset
  3543
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3544
	if (param < 0x80 && _cur_grffile->param_end <= param) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  3545
		grfmsg(7, "SkipIf: Param %d undefined, skipping test", param);
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3546
		return;
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  3547
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3548
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3549
	uint32 param_val = GetParamVal(param, &cond_val);
3806
dbbfd0c2331b (svn r4816) - NewGRF: action 7/9 improvements:
peter1138
parents: 3803
diff changeset
  3550
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  3551
	grfmsg(7, "SkipIf: Test condtype %d, param 0x%08X, condval 0x%08X", condtype, param_val, cond_val);
5703
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3552
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3553
	if (param == 0x88) {
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3554
		/* GRF ID checks */
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3555
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3556
		const GRFConfig *c = GetGRFConfig(cond_val);
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3557
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3558
		if (condtype != 10 && c == NULL) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  3559
			grfmsg(7, "SkipIf: GRFID 0x%08X unknown, skipping test", BSWAP32(cond_val));
5703
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3560
			return;
5234
91b7def5e4b2 (svn r7354) -Codechange: Remove grffile->flags and use grfconfig->flags exclusively. Update action 7/9 now that we know if GRFs are disabled.
peter1138
parents: 5228
diff changeset
  3561
		}
91b7def5e4b2 (svn r7354) -Codechange: Remove grffile->flags and use grfconfig->flags exclusively. Update action 7/9 now that we know if GRFs are disabled.
peter1138
parents: 5228
diff changeset
  3562
5703
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3563
		switch (condtype) {
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3564
			/* Tests 6 to 10 are only for param 0x88, GRFID checks */
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3565
			case 6: // Is GRFID active?
6555
c27c9d5b459f (svn r9031) -Codechange: Introduce grfconfig->status, and use it for states that are
maedhros
parents: 6519
diff changeset
  3566
				result = c->status == GCS_ACTIVATED;
5703
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3567
				break;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3568
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3569
			case 7: // Is GRFID non-active?
6555
c27c9d5b459f (svn r9031) -Codechange: Introduce grfconfig->status, and use it for states that are
maedhros
parents: 6519
diff changeset
  3570
				result = c->status != GCS_ACTIVATED;
5703
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3571
				break;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3572
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3573
			case 8: // GRFID is not but will be active?
6555
c27c9d5b459f (svn r9031) -Codechange: Introduce grfconfig->status, and use it for states that are
maedhros
parents: 6519
diff changeset
  3574
				result = c->status == GCS_INITIALISED;
5703
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3575
				break;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3576
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3577
			case 9: // GRFID is or will be active?
6555
c27c9d5b459f (svn r9031) -Codechange: Introduce grfconfig->status, and use it for states that are
maedhros
parents: 6519
diff changeset
  3578
				result = c->status == GCS_ACTIVATED || c->status == GCS_INITIALISED;
5703
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3579
				break;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3580
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3581
			case 10: // GRFID is not nor will be active
5703
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3582
				/* This is the only condtype that doesn't get ignored if the GRFID is not found */
6555
c27c9d5b459f (svn r9031) -Codechange: Introduce grfconfig->status, and use it for states that are
maedhros
parents: 6519
diff changeset
  3583
				result = c == NULL || c->flags == GCS_DISABLED || c->status == GCS_NOT_FOUND;
5703
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3584
				break;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3585
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  3586
			default: grfmsg(1, "SkipIf: Unsupported GRF test %d. Ignoring", condtype); return;
5234
91b7def5e4b2 (svn r7354) -Codechange: Remove grffile->flags and use grfconfig->flags exclusively. Update action 7/9 now that we know if GRFs are disabled.
peter1138
parents: 5228
diff changeset
  3587
		}
5703
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3588
	} else {
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3589
		/* Parameter or variable tests */
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3590
		switch (condtype) {
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3591
			case 0: result = !!(param_val & (1 << cond_val));
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3592
				break;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3593
			case 1: result = !(param_val & (1 << cond_val));
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3594
				break;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3595
			case 2: result = (param_val & mask) == cond_val;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3596
				break;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3597
			case 3: result = (param_val & mask) != cond_val;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3598
				break;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3599
			case 4: result = (param_val & mask) < cond_val;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3600
				break;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3601
			case 5: result = (param_val & mask) > cond_val;
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3602
				break;
7145
07c1f0c9e645 (svn r9880) -Add: [NewGRF] Add action 7/9 condition 0B/0C (cargo type availability)
glx
parents: 7142
diff changeset
  3603
			case 11: result = GetCargoIDByLabel(BSWAP32(cond_val)) == CT_INVALID;
07c1f0c9e645 (svn r9880) -Add: [NewGRF] Add action 7/9 condition 0B/0C (cargo type availability)
glx
parents: 7142
diff changeset
  3604
				break;
07c1f0c9e645 (svn r9880) -Add: [NewGRF] Add action 7/9 condition 0B/0C (cargo type availability)
glx
parents: 7142
diff changeset
  3605
			case 12: result = GetCargoIDByLabel(BSWAP32(cond_val)) != CT_INVALID;
07c1f0c9e645 (svn r9880) -Add: [NewGRF] Add action 7/9 condition 0B/0C (cargo type availability)
glx
parents: 7142
diff changeset
  3606
				break;
5703
3f848403a814 (svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
peter1138
parents: 5681
diff changeset
  3607
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  3608
			default: grfmsg(1, "SkipIf: Unsupported test %d. Ignoring", condtype); return;
5234
91b7def5e4b2 (svn r7354) -Codechange: Remove grffile->flags and use grfconfig->flags exclusively. Update action 7/9 now that we know if GRFs are disabled.
peter1138
parents: 5228
diff changeset
  3609
		}
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  3610
	}
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  3611
1607
320079c7ac28 (svn r2111) So, result is bool therefore no need for this horrible == 0 thing.
pasky
parents: 1606
diff changeset
  3612
	if (!result) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  3613
		grfmsg(2, "SkipIf: Not skipping sprites, test was false");
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  3614
		return;
359
f0ee94d705ed (svn r547) -newgrf: Enhanced support for action 0x7 and 0x9 (skips). Killer mixture mixed from octo's patch and pasky's old patch (pasky & octo).
darkvater
parents: 357
diff changeset
  3615
	}
f0ee94d705ed (svn r547) -newgrf: Enhanced support for action 0x7 and 0x9 (skips). Killer mixture mixed from octo's patch and pasky's old patch (pasky & octo).
darkvater
parents: 357
diff changeset
  3616
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3617
	uint8 numsprites = grf_load_byte(&buf);
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3618
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3619
	/* numsprites can be a GOTO label if it has been defined in the GRF
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3620
	 * file. The jump will always be the first matching label that follows
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3621
	 * the current nfo_line. If no matching label is found, the first matching
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3622
	 * label in the file is used. */
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3623
	GRFLabel *choice = NULL;
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3624
	for (GRFLabel *label = _cur_grffile->label; label != NULL; label = label->next) {
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3625
		if (label->label != numsprites) continue;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3626
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3627
		/* Remember a goto before the current line */
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3628
		if (choice == NULL) choice = label;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3629
		/* If we find a label here, this is definitely good */
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3630
		if (label->nfo_line > _nfo_line) {
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3631
			choice = label;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3632
			break;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3633
		}
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3634
	}
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3635
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3636
	if (choice != NULL) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  3637
		grfmsg(2, "SkipIf: Jumping to label 0x%0X at line %d, test was true", choice->label, choice->nfo_line);
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3638
		FioSeekTo(choice->pos, SEEK_SET);
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3639
		_nfo_line = choice->nfo_line;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3640
		return;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3641
	}
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3642
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  3643
	grfmsg(2, "SkipIf: Skipping %d sprites, test was true", numsprites);
357
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  3644
	_skip_sprites = numsprites;
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  3645
	if (_skip_sprites == 0) {
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  3646
		/* Zero means there are no sprites to skip, so
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  3647
		 * we use -1 to indicate that all further
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  3648
		 * sprites should be skipped. */
912b71f33867 (svn r545) -newgrf: repaired indendation (pasky & octo)
celestar
parents: 356
diff changeset
  3649
		_skip_sprites = -1;
6422
14794ebde68e (svn r8831) -Feature: If an action 7/9 leads to skipping the rest of the file, disable the
maedhros
parents: 6421
diff changeset
  3650
14794ebde68e (svn r8831) -Feature: If an action 7/9 leads to skipping the rest of the file, disable the
maedhros
parents: 6421
diff changeset
  3651
		/* If an action 8 hasn't been encountered yet, disable the grf. */
7421
094cf7e66ba8 (svn r10178) -Fix: Don't deactivate newgrf files when skipping the rest of the file during the initialisation stage.
maedhros
parents: 7410
diff changeset
  3652
		if (_cur_grfconfig->status != GCS_ACTIVATED && _cur_grfconfig->status != GCS_INITIALISED) {
094cf7e66ba8 (svn r10178) -Fix: Don't deactivate newgrf files when skipping the rest of the file during the initialisation stage.
maedhros
parents: 7410
diff changeset
  3653
			_cur_grfconfig->status = GCS_DISABLED;
094cf7e66ba8 (svn r10178) -Fix: Don't deactivate newgrf files when skipping the rest of the file during the initialisation stage.
maedhros
parents: 7410
diff changeset
  3654
		}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3655
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3656
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3657
5317
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5306
diff changeset
  3658
5753
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  3659
/* Action 0x08 (GLS_FILESCAN) */
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  3660
static void ScanInfo(byte *buf, int len)
5228
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
  3661
{
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3662
	if (!check_length(len, 8, "Info")) return;
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3663
	buf++;
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3664
	grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3665
	uint32 grfid  = grf_load_dword(&buf);
5228
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
  3666
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
  3667
	_cur_grfconfig->grfid = grfid;
5317
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5306
diff changeset
  3668
5329
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  3669
	/* GRF IDs starting with 0xFF are reserved for internal TTDPatch use */
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  3670
	if (GB(grfid, 24, 8) == 0xFF) SETBIT(_cur_grfconfig->flags, GCF_SYSTEM);
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  3671
5317
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5306
diff changeset
  3672
	len -= 6;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3673
	const char *name = grf_load_string(&buf, len);
6512
8625c30bd63d (svn r8964) -Codechange: use grf_load_string to read action 8 strings instead of trying to do the same manually.
rubidium
parents: 6474
diff changeset
  3674
	_cur_grfconfig->name = TranslateTTDPatchCodes(name);
8625c30bd63d (svn r8964) -Codechange: use grf_load_string to read action 8 strings instead of trying to do the same manually.
rubidium
parents: 6474
diff changeset
  3675
8625c30bd63d (svn r8964) -Codechange: use grf_load_string to read action 8 strings instead of trying to do the same manually.
rubidium
parents: 6474
diff changeset
  3676
	len -= strlen(name) + 1;
8625c30bd63d (svn r8964) -Codechange: use grf_load_string to read action 8 strings instead of trying to do the same manually.
rubidium
parents: 6474
diff changeset
  3677
	if (len > 0) {
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3678
		const char *info = grf_load_string(&buf, len);
6512
8625c30bd63d (svn r8964) -Codechange: use grf_load_string to read action 8 strings instead of trying to do the same manually.
rubidium
parents: 6474
diff changeset
  3679
		_cur_grfconfig->info = TranslateTTDPatchCodes(info);
5317
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5306
diff changeset
  3680
	}
5329
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  3681
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  3682
	/* GLS_INFOSCAN only looks for the action 8, so we can skip the rest of the file */
5228
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
  3683
	_skip_sprites = -1;
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
  3684
}
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
  3685
3640
b73687dd2b62 (svn r4549) - NewGRF: store the grf version from Action 0x08.
peter1138
parents: 3638
diff changeset
  3686
/* Action 0x08 */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3687
static void GRFInfo(byte *buf, int len)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3688
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3689
	/* <08> <version> <grf-id> <name> <info>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3690
	 *
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3691
	 * B version       newgrf version, currently 06
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3692
	 * 4*B grf-id      globally unique ID of this .grf file
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3693
	 * S name          name of this .grf set
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3694
	 * S info          string describing the set, and e.g. author and copyright */
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3695
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3696
	if (!check_length(len, 8, "GRFInfo")) return;
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3697
	buf++;
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3698
	uint8 version    = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3699
	uint32 grfid     = grf_load_dword(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3700
	const char *name = grf_load_string(&buf, len - 6);
366
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  3701
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  3702
	_cur_grffile->grfid = grfid;
3640
b73687dd2b62 (svn r4549) - NewGRF: store the grf version from Action 0x08.
peter1138
parents: 3638
diff changeset
  3703
	_cur_grffile->grf_version = version;
7302
7aa974539f27 (svn r10045) -Codechange: Process Action 8 during GLS_RESERVATION to allow Action 7/Action 9s to work properly
peter1138
parents: 7301
diff changeset
  3704
	_cur_grfconfig->status = _cur_stage < GLS_RESERVE ? GCS_INITIALISED : GCS_ACTIVATED;
366
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  3705
3711
4a0d1c635b56 (svn r4654) - Fix [NewGRF]: Properly read in the GRFID. This fixes GRFID checking and activation/deactivation. Do swap the GRFID for displaying purposes.
Darkvater
parents: 3709
diff changeset
  3706
	/* Do swap the GRFID for displaying purposes since people expect that */
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  3707
	DEBUG(grf, 1, "GRFInfo: Loaded GRFv%d set %08lX - %s", version, BSWAP32(grfid), name);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3708
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3709
3640
b73687dd2b62 (svn r4549) - NewGRF: store the grf version from Action 0x08.
peter1138
parents: 3638
diff changeset
  3710
/* Action 0x0A */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3711
static void SpriteReplace(byte *buf, int len)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3712
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3713
	/* <0A> <num-sets> <set1> [<set2> ...]
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3714
	 * <set>: <num-sprites> <first-sprite>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3715
	 *
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3716
	 * B num-sets      How many sets of sprites to replace.
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3717
	 * Each set:
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3718
	 * B num-sprites   How many sprites are in this set
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3719
	 * W first-sprite  First sprite number to replace */
361
ad7a042ee0eb (svn r549) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 360
diff changeset
  3720
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3721
	buf++; // skip action byte
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3722
	uint8 num_sets = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3723
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3724
	for (uint i = 0; i < num_sets; i++) {
2342
c19fb4f2df30 (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
  3725
		uint8 num_sprites = grf_load_byte(&buf);
c19fb4f2df30 (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
  3726
		uint16 first_sprite = grf_load_word(&buf);
398
20f8a2faf809 (svn r590) -newgrf: Instead of a bunch of statinfo arrays, use station-array of struct StationSpec-s (pasky).
darkvater
parents: 397
diff changeset
  3727
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  3728
		grfmsg(2, "SpriteReplace: [Set %d] Changing %d sprites, beginning with %d",
2342
c19fb4f2df30 (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
  3729
			i, num_sprites, first_sprite
c19fb4f2df30 (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
  3730
		);
361
ad7a042ee0eb (svn r549) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 360
diff changeset
  3731
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3732
		for (uint j = 0; j < num_sprites; j++) {
7404
fc0559157f16 (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: 7390
diff changeset
  3733
			LoadNextSprite(first_sprite + j, _file_index, _nfo_line); // XXX
3557
5d12a78ce141 (svn r4431) - NewGRF: rename nfo_line to _nfo_line, to avoid confusing Darkvater ;)
peter1138
parents: 3555
diff changeset
  3734
			_nfo_line++;
361
ad7a042ee0eb (svn r549) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 360
diff changeset
  3735
		}
ad7a042ee0eb (svn r549) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 360
diff changeset
  3736
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3737
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3738
7025
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3739
/* Action 0x0A (SKIP) */
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3740
static void SkipActA(byte *buf, int len)
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3741
{
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3742
	buf++;
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3743
	uint8 num_sets = grf_load_byte(&buf);
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3744
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3745
	for (uint i = 0; i < num_sets; i++) {
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3746
		/* Skip the sprites this replaces */
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3747
		_skip_sprites += grf_load_byte(&buf);
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3748
		/* But ignore where they go */
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3749
		grf_load_word(&buf);
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3750
	}
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3751
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3752
	grfmsg(3, "SkipActA: Skipping %d sprites", _skip_sprites);
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3753
}
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  3754
3715
dd9807bf5927 (svn r4658) - NewGRF: add Action 0xNN comments before each action handler. This mainly aids code navigation...
peter1138
parents: 3714
diff changeset
  3755
/* Action 0x0B */
6465
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3756
static void GRFLoadError(byte *buf, int len)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3757
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3758
	/* <0B> <severity> <language-id> <message-id> [<message...> 00] [<data...>] 00 [<parnum>]
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3759
	 *
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3760
	 * B severity      00: notice, contine loading grf file
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3761
	 *                 01: warning, continue loading grf file
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3762
	 *                 02: error, but continue loading grf file, and attempt
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3763
	 *                     loading grf again when loading or starting next game
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3764
	 *                 03: error, abort loading and prevent loading again in
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3765
	 *                     the future (only when restarting the patch)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3766
	 * B language-id   see action 4, use 1F for built-in error messages
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3767
	 * B message-id    message to show, see below
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3768
	 * S message       for custom messages (message-id FF), text of the message
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3769
	 *                 not present for built-in messages.
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3770
	 * V data          additional data for built-in (or custom) messages
6465
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3771
	 * B parnum        parameter numbers to be shown in the message (maximum of 2) */
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3772
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3773
	static const StringID msgstr[] = {
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3774
		STR_NEWGRF_ERROR_VERSION_NUMBER,
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3775
		STR_NEWGRF_ERROR_DOS_OR_WINDOWS,
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3776
		STR_NEWGRF_ERROR_UNSET_SWITCH,
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3777
		STR_NEWGRF_ERROR_INVALID_PARAMETER,
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3778
		STR_NEWGRF_ERROR_LOAD_BEFORE,
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3779
		STR_NEWGRF_ERROR_LOAD_AFTER
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3780
	};
5567
2af6b4aa2833 (svn r7564) -Codechange: Some newgrf changes. FFIR/EVAW endian-swapping, functionalize
Darkvater
parents: 5557
diff changeset
  3781
6465
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3782
	static const StringID sevstr[] = {
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3783
		STR_NEWGRF_ERROR_MSG_INFO,
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3784
		STR_NEWGRF_ERROR_MSG_WARNING,
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3785
		STR_NEWGRF_ERROR_MSG_ERROR,
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3786
		STR_NEWGRF_ERROR_MSG_FATAL
5567
2af6b4aa2833 (svn r7564) -Codechange: Some newgrf changes. FFIR/EVAW endian-swapping, functionalize
Darkvater
parents: 5557
diff changeset
  3787
	};
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3788
6465
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3789
	if (!check_length(len, 6, "GRFLoadError")) return;
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3790
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3791
	/* For now we can only show one message per newgrf file. */
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3792
	if (_cur_grfconfig->error != NULL) return;
6416
be4399248c60 (svn r8825) -Fix: Make sure strings read from newgrf files are 0 terminated and 0
maedhros
parents: 6388
diff changeset
  3793
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  3794
	buf++; // Skip the action byte.
6421
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3795
	byte severity   = grf_load_byte(&buf);
6465
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3796
	byte lang       = grf_load_byte(&buf);
6421
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3797
	byte message_id = grf_load_byte(&buf);
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3798
	len -= 4;
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3799
7369
26325201d4d7 (svn r10114) -Fix: Only load newgrf error messages if the language matches the current
maedhros
parents: 7366
diff changeset
  3800
	/* Skip the error if it isn't valid for the current language. */
26325201d4d7 (svn r10114) -Fix: Only load newgrf error messages if the language matches the current
maedhros
parents: 7366
diff changeset
  3801
	if (!CheckGrfLangID(lang, _cur_grffile->grf_version)) return;
26325201d4d7 (svn r10114) -Fix: Only load newgrf error messages if the language matches the current
maedhros
parents: 7366
diff changeset
  3802
6421
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3803
	/* Skip the error until the activation stage unless bit 7 of the severity
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3804
	 * is set. */
7302
7aa974539f27 (svn r10045) -Codechange: Process Action 8 during GLS_RESERVATION to allow Action 7/Action 9s to work properly
peter1138
parents: 7301
diff changeset
  3805
	if (!HASBIT(severity, 7) && _cur_stage == GLS_INIT) {
7301
0e314c60f7a0 (svn r10044) -Fix: Minor NewGRF debug message fixes, and skip sprites of an unsupported Action 5 feature.
peter1138
parents: 7277
diff changeset
  3806
		grfmsg(7, "GRFLoadError: Skipping non-fatal GRFLoadError in stage %d", _cur_stage);
441
892cb9999501 (svn r650) Pasky fix #4. (Misc fixes to get USSet going)
miham
parents: 440
diff changeset
  3807
		return;
3588
a1adf8a40756 (svn r4474) - NewGRF: Skip non-fatal errors when not in stage 2.
peter1138
parents: 3577
diff changeset
  3808
	}
6421
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3809
	CLRBIT(severity, 7);
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3810
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3811
	if (severity >= lengthof(sevstr)) {
6465
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3812
		grfmsg(7, "GRFLoadError: Invalid severity id %d. Setting to 2 (non-fatal error).", severity);
6421
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3813
		severity = 2;
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3814
	} else if (severity == 3) {
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3815
		/* This is a fatal error, so make sure the GRF is deactivated and no
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3816
		 * more of it gets loaded. */
6555
c27c9d5b459f (svn r9031) -Codechange: Introduce grfconfig->status, and use it for states that are
maedhros
parents: 6519
diff changeset
  3817
		_cur_grfconfig->status = GCS_DISABLED;
6421
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3818
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3819
		_skip_sprites = -1;
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3820
	}
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3821
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3822
	if (message_id >= lengthof(msgstr) && message_id != 0xFF) {
6465
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3823
		grfmsg(7, "GRFLoadError: Invalid message id.");
6421
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3824
		return;
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3825
	}
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3826
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3827
	if (len <= 1) {
6465
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3828
		grfmsg(7, "GRFLoadError: No message data supplied.");
6421
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3829
		return;
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3830
	}
48a6f5c43920 (svn r8830) -Feature: Stop loading and disable the current newgrf if a fatal error message
maedhros
parents: 6417
diff changeset
  3831
6465
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3832
	GRFError *error = CallocT<GRFError>(1);
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3833
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3834
	error->severity = sevstr[severity];
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3835
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3836
	if (message_id == 0xFF) {
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3837
		/* This is a custom error message. */
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3838
		const char *message = grf_load_string(&buf, len);
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3839
		len -= (strlen(message) + 1);
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3840
7369
26325201d4d7 (svn r10114) -Fix: Only load newgrf error messages if the language matches the current
maedhros
parents: 7366
diff changeset
  3841
		error->custom_message = TranslateTTDPatchCodes(message);
6465
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3842
	} else {
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3843
		error->message = msgstr[message_id];
6429
02c062eb2c74 (svn r8838) -Feature: Show newgrf error messages loaded in Action B in the newgrf gui
maedhros
parents: 6422
diff changeset
  3844
	}
02c062eb2c74 (svn r8838) -Feature: Show newgrf error messages loaded in Action B in the newgrf gui
maedhros
parents: 6422
diff changeset
  3845
6465
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3846
	if (len > 0) {
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3847
		const char *data = grf_load_string(&buf, len);
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3848
		len -= (strlen(data) + 1);
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3849
7369
26325201d4d7 (svn r10114) -Fix: Only load newgrf error messages if the language matches the current
maedhros
parents: 7366
diff changeset
  3850
		error->data = TranslateTTDPatchCodes(data);
6465
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3851
	}
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3852
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3853
	/* Only two parameter numbers can be used in the string. */
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3854
	uint i = 0;
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3855
	for (; i < 2 && len > 0; i++) {
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3856
		error->param_number[i] = grf_load_byte(&buf);
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3857
		len--;
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3858
	}
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3859
	error->num_params = i;
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3860
dddb39b41ee0 (svn r8881) -Feature: Allow built-in newgrf error messages to be translated, and load custom error messages properly.
maedhros
parents: 6454
diff changeset
  3861
	_cur_grfconfig->error = error;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3862
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3863
3715
dd9807bf5927 (svn r4658) - NewGRF: add Action 0xNN comments before each action handler. This mainly aids code navigation...
peter1138
parents: 3714
diff changeset
  3864
/* Action 0x0C */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3865
static void GRFComment(byte *buf, int len)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3866
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3867
	/* <0C> [<ignored...>]
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3868
	 *
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3869
	 * V ignored       Anything following the 0C is ignored */
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3870
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3871
	if (len == 1) return;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  3872
6433
84cd6e4262fd (svn r8843) -Fix
tron
parents: 6429
diff changeset
  3873
	int text_len = len - 1;
84cd6e4262fd (svn r8843) -Fix
tron
parents: 6429
diff changeset
  3874
	const char *text = (const char*)(buf + 1);
84cd6e4262fd (svn r8843) -Fix
tron
parents: 6429
diff changeset
  3875
	grfmsg(2, "GRFComment: %.*s", text_len, text);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3876
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3877
5776
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3878
/* Action 0x0D (GLS_SAFETYSCAN) */
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3879
static void SafeParamSet(byte *buf, int len)
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3880
{
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  3881
	if (!check_length(len, 5, "SafeParamSet")) return;
5776
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3882
	buf++;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3883
	uint8 target = grf_load_byte(&buf);
5776
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3884
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3885
	/* Only writing GRF parameters is considered safe */
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3886
	if (target < 0x80) return;
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3887
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3888
	/* GRM could be unsafe, but as here it can only happen after other GRFs
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3889
	 * are loaded, it should be okay. If the GRF tried to use the slots it
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3890
	 * reserved, it would be marked unsafe anyway. GRM for (e.g. bridge)
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3891
	 * sprites  is considered safe. */
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3892
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3893
	SETBIT(_cur_grfconfig->flags, GCF_UNSAFE);
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3894
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3895
	/* Skip remainder of GRF */
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3896
	_skip_sprites = -1;
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3897
}
d80e79a2e71b (svn r7831) -Codechange: [NewGRF] Do not mark as unsafe those NewGRFs that set their own parameters (via action D) and/or change only bridge sprite table layouts (action 0, property D).
peter1138
parents: 5753
diff changeset
  3898
7011
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3899
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3900
static uint32 GetPatchVariable(uint8 param)
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3901
{
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3902
	switch (param) {
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3903
		/* start year - 1920 */
7075
7d7fa1ff2b18 (svn r9793) -Fix (r9701): Action D 'TTDPatch variable' 0x0B should be the starting year, not the current year.
maedhros
parents: 7072
diff changeset
  3904
		case 0x0B: return max(_patches.starting_year, ORIGINAL_BASE_YEAR) - ORIGINAL_BASE_YEAR;
7011
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3905
		/* freight trains weight factor */
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3906
		case 0x0E: return _patches.freight_trains;
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3907
		/* empty wagon speed increase */
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3908
		case 0x0F: return 0;
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3909
		/* plane speed factor */
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3910
		case 0x10: return 4;
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3911
		/* 2CC colormap base sprite */
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3912
		case 0x11: return SPR_2CCMAP_BASE;
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3913
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3914
		default:
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3915
			grfmsg(2, "ParamSet: Unknown Patch variable 0x%02X.", param);
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3916
			return 0;
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3917
	}
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3918
}
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3919
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  3920
7277
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3921
static uint32 PerformGRM(uint32 *grm, uint16 num_ids, uint16 count, uint8 op, uint8 target, const char *type)
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3922
{
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3923
	uint start = 0;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3924
	uint size  = 0;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3925
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3926
	if (op == 6) {
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3927
		/* Return GRFID of set that reserved ID */
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3928
		return grm[_cur_grffile->param[target]];
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3929
	}
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3930
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3931
	/* With an operation of 2 or 3, we want to reserve a specific block of IDs */
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3932
	if (op == 2 || op == 3) start = _cur_grffile->param[target];
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3933
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3934
	for (uint i = start; i < num_ids; i++) {
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3935
		if (grm[i] == 0) {
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3936
			size++;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3937
		} else {
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3938
			if (op == 2 || op == 3) break;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3939
			start = i + 1;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3940
			size = 0;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3941
		}
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3942
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3943
		if (size == count) break;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3944
	}
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3945
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3946
	if (size == count) {
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3947
		/* Got the slot... */
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3948
		if (op == 0 || op == 3) {
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3949
			grfmsg(2, "ParamSet: GRM: Reserving %d %s at %d", count, type, start);
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3950
			for (uint i = 0; i < count; i++) grm[start + i] = _cur_grffile->grfid;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3951
		}
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3952
		return start;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3953
	}
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3954
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3955
	/* Unable to allocate */
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3956
	if (op != 4 && op != 5) {
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3957
		/* Deactivate GRF */
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3958
		grfmsg(0, "ParamSet: GRM: Unable to allocate %d %s, deactivating", count, type);
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3959
		_cur_grfconfig->status = GCS_DISABLED;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3960
		_skip_sprites = -1;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3961
		return UINT_MAX;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3962
	}
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3963
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3964
	grfmsg(1, "ParamSet: GRM: Unable to allocate %d %s", count, type);
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3965
	return UINT_MAX;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3966
}
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3967
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  3968
356
e3721e481b38 (svn r544) -newgrf: codechange for better handling (pasky and octo__)
celestar
parents: 193
diff changeset
  3969
/* Action 0x0D */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3970
static void ParamSet(byte *buf, int len)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3971
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3972
	/* <0D> <target> <operation> <source1> <source2> [<data>]
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3973
	 *
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3974
	 * B target        parameter number where result is stored
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3975
	 * B operation     operation to perform, see below
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3976
	 * B source1       first source operand
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3977
	 * B source2       second source operand
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3978
	 * D data          data to use in the calculation, not necessary
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3979
	 *                 if both source1 and source2 refer to actual parameters
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3980
	 *
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3981
	 * Operations
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3982
	 * 00      Set parameter equal to source1
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3983
	 * 01      Addition, source1 + source2
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3984
	 * 02      Subtraction, source1 - source2
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3985
	 * 03      Unsigned multiplication, source1 * source2 (both unsigned)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3986
	 * 04      Signed multiplication, source1 * source2 (both signed)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3987
	 * 05      Unsigned bit shift, source1 by source2 (source2 taken to be a
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3988
	 *         signed quantity; left shift if positive and right shift if
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3989
	 *         negative, source1 is unsigned)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3990
	 * 06      Signed bit shift, source1 by source2
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3991
	 *         (source2 like in 05, and source1 as well)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  3992
	 */
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  3993
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  3994
	if (!check_length(len, 5, "ParamSet")) return;
418
67457dd7e5bc (svn r615) Fix the same bug in ParamSet action loading, pointer out by Bjarni too. (pasky)
bjarni
parents: 416
diff changeset
  3995
	buf++;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3996
	uint8 target = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3997
	uint8 oper   = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3998
	uint32 src1  = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  3999
	uint32 src2  = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4000
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4001
	uint32 data = 0;
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4002
	if (len >= 8) data = grf_load_dword(&buf);
398
20f8a2faf809 (svn r590) -newgrf: Instead of a bunch of statinfo arrays, use station-array of struct StationSpec-s (pasky).
darkvater
parents: 397
diff changeset
  4003
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4004
	/* You can add 80 to the operation to make it apply only if the target
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4005
	 * is not defined yet.  In this respect, a parameter is taken to be
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4006
	 * defined if any of the following applies:
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4007
	 * - it has been set to any value in the newgrf(w).cfg parameter list
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4008
	 * - it OR A PARAMETER WITH HIGHER NUMBER has been set to any value by
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4009
	 *   an earlier action D */
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4010
	if (HASBIT(oper, 7)) {
3807
927ac7827a28 (svn r4817) - NewGRF: allow partial support for parameter retrieval in action D.
peter1138
parents: 3806
diff changeset
  4011
		if (target < 0x80 && target < _cur_grffile->param_end) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  4012
			grfmsg(7, "ParamSet: Param %u already defined, skipping", target);
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4013
			return;
3807
927ac7827a28 (svn r4817) - NewGRF: allow partial support for parameter retrieval in action D.
peter1138
parents: 3806
diff changeset
  4014
		}
927ac7827a28 (svn r4817) - NewGRF: allow partial support for parameter retrieval in action D.
peter1138
parents: 3806
diff changeset
  4015
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4016
		oper = GB(oper, 0, 7);
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4017
	}
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4018
3808
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4019
	if (src2 == 0xFE) {
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4020
		if (GB(data, 0, 8) == 0xFF) {
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4021
			if (data == 0x0000FFFF) {
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4022
				/* Patch variables */
7011
9a7685426523 (svn r9701) -Codechange: Add support for returning 'ttdpatch variables' - http://wiki.ttdpatch.net/tiki-index.php?page=ActionDSpecialVariables
peter1138
parents: 7003
diff changeset
  4023
				src1 = GetPatchVariable(src1);
3808
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4024
			} else {
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4025
				/* GRF Resource Management */
5225
52ddcedcc6f7 (svn r7345) -Codechange: enumification of NewGRF loading stage, and move enum definition to header for future use.
peter1138
parents: 5211
diff changeset
  4026
				if (_cur_stage != GLS_ACTIVATION) {
4961
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4027
					/* Ignore GRM during initialization */
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4028
					src1 = 0;
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4029
				} else {
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4030
					uint8  op      = src1;
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4031
					uint8  feature = GB(data, 8, 8);
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4032
					uint16 count   = GB(data, 16, 16);
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4033
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4034
					switch (feature) {
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4035
						case 0x00: // Trains
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4036
						case 0x01: // Road Vehicles
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4037
						case 0x02: // Ships
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4038
						case 0x03: // Aircraft
7277
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  4039
							src1 = PerformGRM(&_grm_engines[_vehshifts[feature]], _vehcounts[feature], count, op, target, "vehicles");
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  4040
							if (_skip_sprites == -1) return;
4961
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4041
							break;
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4042
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4043
						case 0x08: // General sprites
4961
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4044
							switch (op) {
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4045
								case 0:
6140
22c9279c3bbd (svn r8505) -Codechange: Ensure GRM allocated sprites will be below the original 16384 sprite limit. If not, fail and disable the NewGRF.
peter1138
parents: 6126
diff changeset
  4046
									/* Check if the allocated sprites will fit below the original sprite limit */
22c9279c3bbd (svn r8505) -Codechange: Ensure GRM allocated sprites will be below the original 16384 sprite limit. If not, fail and disable the NewGRF.
peter1138
parents: 6126
diff changeset
  4047
									if (_cur_spriteid + count >= 16384) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  4048
										grfmsg(0, "ParamSet: GRM: Unable to allocate %d sprites; try changing NewGRF order", count);
6555
c27c9d5b459f (svn r9031) -Codechange: Introduce grfconfig->status, and use it for states that are
maedhros
parents: 6519
diff changeset
  4049
										_cur_grfconfig->status = GCS_DISABLED;
6140
22c9279c3bbd (svn r8505) -Codechange: Ensure GRM allocated sprites will be below the original 16384 sprite limit. If not, fail and disable the NewGRF.
peter1138
parents: 6126
diff changeset
  4050
22c9279c3bbd (svn r8505) -Codechange: Ensure GRM allocated sprites will be below the original 16384 sprite limit. If not, fail and disable the NewGRF.
peter1138
parents: 6126
diff changeset
  4051
										_skip_sprites = -1;
22c9279c3bbd (svn r8505) -Codechange: Ensure GRM allocated sprites will be below the original 16384 sprite limit. If not, fail and disable the NewGRF.
peter1138
parents: 6126
diff changeset
  4052
										return;
22c9279c3bbd (svn r8505) -Codechange: Ensure GRM allocated sprites will be below the original 16384 sprite limit. If not, fail and disable the NewGRF.
peter1138
parents: 6126
diff changeset
  4053
									}
22c9279c3bbd (svn r8505) -Codechange: Ensure GRM allocated sprites will be below the original 16384 sprite limit. If not, fail and disable the NewGRF.
peter1138
parents: 6126
diff changeset
  4054
4961
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4055
									/* 'Reserve' space at the current sprite ID */
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4056
									src1 = _cur_spriteid;
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4057
									_cur_spriteid += count;
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4058
									break;
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4059
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4060
								case 1:
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4061
									src1 = _cur_spriteid;
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4062
									break;
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4063
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4064
								default:
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  4065
									grfmsg(1, "ParamSet: GRM: Unsupported operation %d for general sprites", op);
4961
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4066
									return;
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4067
							}
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4068
							break;
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4069
7277
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  4070
						case 0x0B: // Cargo
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  4071
							src1 = PerformGRM(_grm_cargos, NUM_CARGO, count, op, target, "cargos");
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  4072
							if (_skip_sprites == -1) return;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  4073
							break;
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  4074
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  4075
						default: grfmsg(1, "ParamSet: GRM: Unsupported feature 0x%X", feature); return;
4961
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4076
					}
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4077
				}
3808
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4078
			}
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4079
		} else {
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4080
			/* Read another GRF File's parameter */
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4081
			const GRFFile *file = GetFileByGRFID(data);
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4082
			if (file == NULL || src1 >= file->param_end) {
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4083
				src1 = 0;
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4084
			} else {
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4085
				src1 = file->param[src1];
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4086
			}
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4087
		}
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4088
	} else {
3808
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4089
		/* The source1 and source2 operands refer to the grf parameter number
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4090
		 * like in action 6 and 7.  In addition, they can refer to the special
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4091
		 * variables available in action 7, or they can be FF to use the value
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4092
		 * of <data>.  If referring to parameters that are undefined, a value
332b9b202afb (svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
peter1138
parents: 3807
diff changeset
  4093
		 * of 0 is used instead.  */
3811
7324eb563ae0 (svn r4821) - NewGRF: simplify parameter retrieval in Action 0x0D
peter1138
parents: 3808
diff changeset
  4094
		src1 = (src1 == 0xFF) ? data : GetParamVal(src1, NULL);
7324eb563ae0 (svn r4821) - NewGRF: simplify parameter retrieval in Action 0x0D
peter1138
parents: 3808
diff changeset
  4095
		src2 = (src2 == 0xFF) ? data : GetParamVal(src2, NULL);
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4096
	}
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4097
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4098
	/* TODO: You can access the parameters of another GRF file by using
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4099
	 * source2=FE, source1=the other GRF's parameter number and data=GRF
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4100
	 * ID.  This is only valid with operation 00 (set).  If the GRF ID
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4101
	 * cannot be found, a value of 0 is used for the parameter value
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4102
	 * instead. */
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4103
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4104
	uint32 res;
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4105
	switch (oper) {
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4106
		case 0x00:
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4107
			res = src1;
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4108
			break;
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4109
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4110
		case 0x01:
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4111
			res = src1 + src2;
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4112
			break;
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4113
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4114
		case 0x02:
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4115
			res = src1 - src2;
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4116
			break;
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4117
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4118
		case 0x03:
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4119
			res = src1 * src2;
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4120
			break;
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4121
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4122
		case 0x04:
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4123
			res = (int32)src1 * (int32)src2;
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4124
			break;
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4125
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4126
		case 0x05:
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 3997
diff changeset
  4127
			if ((int32)src2 < 0) {
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4128
				res = src1 >> -(int32)src2;
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 3997
diff changeset
  4129
			} else {
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4130
				res = src1 << src2;
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 3997
diff changeset
  4131
			}
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4132
			break;
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4133
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4134
		case 0x06:
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 3997
diff changeset
  4135
			if ((int32)src2 < 0) {
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4136
				res = (int32)src1 >> -(int32)src2;
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 3997
diff changeset
  4137
			} else {
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4138
				res = (int32)src1 << src2;
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 3997
diff changeset
  4139
			}
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4140
			break;
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4141
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4142
		case 0x07: // Bitwise AND
2442
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4143
			res = src1 & src2;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4144
			break;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4145
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4146
		case 0x08: // Bitwise OR
2442
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4147
			res = src1 | src2;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4148
			break;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4149
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4150
		case 0x09: // Unsigned division
2442
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4151
			if (src2 == 0) {
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4152
				res = src1;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4153
			} else {
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4154
				res = src1 / src2;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4155
			}
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4156
			break;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4157
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4158
		case 0x0A: // Signed divison
2442
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4159
			if (src2 == 0) {
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4160
				res = src1;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4161
			} else {
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4162
				res = (int32)src1 / (int32)src2;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4163
			}
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4164
			break;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4165
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4166
		case 0x0B: // Unsigned modulo
2442
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4167
			if (src2 == 0) {
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4168
				res = src1;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4169
			} else {
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4170
				res = src1 % src2;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4171
			}
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4172
			break;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4173
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4174
		case 0x0C: // Signed modulo
2442
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4175
			if (src2 == 0) {
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4176
				res = src1;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4177
			} else {
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4178
				res = (int32)src1 % (int32)src2;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4179
			}
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4180
			break;
da9a2075c747 (svn r2968) -Newgrf: Implement current set of action D (ParamSet) operations.
peter1138
parents: 2440
diff changeset
  4181
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4182
		default: grfmsg(0, "ParamSet: Unknown operation %d, skipping", oper); return;
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4183
	}
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4184
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4185
	switch (target) {
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4186
		case 0x8E: // Y-Offset for train sprites
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4187
			_traininfo_vehicle_pitch = res;
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4188
			break;
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4189
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4190
		/* @todo implement */
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4191
		case 0x8F: // Rail track type cost factors
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4192
		case 0x93: // Tile refresh offset to left
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4193
		case 0x94: // Tile refresh offset to right
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4194
		case 0x95: // Tile refresh offset upwards
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4195
		case 0x96: // Tile refresh offset downwards
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4196
		case 0x97: // Snow line height
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4197
		case 0x99: // Global ID offset
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4198
			grfmsg(7, "ParamSet: Skipping unimplemented target 0x%02X", target);
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4199
			break;
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4200
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4201
		case 0x9E: // Miscellaneous GRF features
3814
d0b901dfc313 (svn r4824) - NewGRF: add support for getting/setting miscellaneous grf flags (param 0x9E)
peter1138
parents: 3811
diff changeset
  4202
			_misc_grf_features = res;
3845
c3cd4b825c2f (svn r4869) - NewGRF: support setting train list vehicle width to 32 instead of 29 pixels, for sets which use 32 pixel long engines/wagons.
peter1138
parents: 3825
diff changeset
  4203
			/* Set train list engine width */
7037
3cd1bd7a6edb (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros
parents: 7029
diff changeset
  4204
			_traininfo_vehicle_width = HasGrfMiscBit(GMB_TRAIN_WIDTH_32_PIXELS) ? 32 : 29;
3814
d0b901dfc313 (svn r4824) - NewGRF: add support for getting/setting miscellaneous grf flags (param 0x9E)
peter1138
parents: 3811
diff changeset
  4205
			break;
d0b901dfc313 (svn r4824) - NewGRF: add support for getting/setting miscellaneous grf flags (param 0x9E)
peter1138
parents: 3811
diff changeset
  4206
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4207
		default:
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4208
			if (target < 0x80) {
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4209
				_cur_grffile->param[target] = res;
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4210
				if (target + 1U > _cur_grffile->param_end) _cur_grffile->param_end = target + 1;
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4211
			} else {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4212
				grfmsg(7, "ParamSet: Skipping unknown target 0x%02X", target);
2345
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4213
			}
8a14ff5d4851 (svn r2871) -Feature/Fix: Per GRF parameter lists
tron
parents: 2342
diff changeset
  4214
			break;
362
bd9bc9c072ba (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky.
darkvater
parents: 361
diff changeset
  4215
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  4216
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  4217
5753
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4218
/* Action 0x0E (GLS_SAFETYSCAN) */
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4219
static void SafeGRFInhibit(byte *buf, int len)
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4220
{
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4221
	/* <0E> <num> <grfids...>
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4222
	 *
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4223
	 * B num           Number of GRFIDs that follow
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4224
	 * D grfids        GRFIDs of the files to deactivate */
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4225
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4226
	if (!check_length(len, 2, "GRFInhibit")) return;
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4227
	buf++;
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4228
	uint8 num = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4229
	if (!check_length(len, 2 + 4 * num, "GRFInhibit")) return;
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4230
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4231
	for (uint i = 0; i < num; i++) {
5753
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4232
		uint32 grfid = grf_load_dword(&buf);
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4233
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4234
		/* GRF is unsafe it if tries to deactivate other GRFs */
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4235
		if (grfid != _cur_grfconfig->grfid) {
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4236
			SETBIT(_cur_grfconfig->flags, GCF_UNSAFE);
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4237
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4238
			/* Skip remainder of GRF */
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4239
			_skip_sprites = -1;
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4240
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4241
			return;
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4242
		}
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4243
	}
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4244
}
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4245
3715
dd9807bf5927 (svn r4658) - NewGRF: add Action 0xNN comments before each action handler. This mainly aids code navigation...
peter1138
parents: 3714
diff changeset
  4246
/* Action 0x0E */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  4247
static void GRFInhibit(byte *buf, int len)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  4248
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  4249
	/* <0E> <num> <grfids...>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  4250
	 *
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  4251
	 * B num           Number of GRFIDs that follow
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  4252
	 * D grfids        GRFIDs of the files to deactivate */
367
d0d895bd4972 (svn r555) -newgrf: Preliminary support for action 0xE. Inhibit another GRF file by ID. It won't really work until we get stages support (pasky & octo).
darkvater
parents: 366
diff changeset
  4253
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4254
	if (!check_length(len, 2, "GRFInhibit")) return;
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4255
	buf++;
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4256
	uint8 num = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4257
	if (!check_length(len, 2 + 4 * num, "GRFInhibit")) return;
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4258
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4259
	for (uint i = 0; i < num; i++) {
367
d0d895bd4972 (svn r555) -newgrf: Preliminary support for action 0xE. Inhibit another GRF file by ID. It won't really work until we get stages support (pasky & octo).
darkvater
parents: 366
diff changeset
  4260
		uint32 grfid = grf_load_dword(&buf);
5333
8e7d68b06399 (svn r7495) -Fix (r7354): [NewGRF] Deactivate the target GRF, not the current GRF.
peter1138
parents: 5329
diff changeset
  4261
		GRFConfig *file = GetGRFConfig(grfid);
367
d0d895bd4972 (svn r555) -newgrf: Preliminary support for action 0xE. Inhibit another GRF file by ID. It won't really work until we get stages support (pasky & octo).
darkvater
parents: 366
diff changeset
  4262
d0d895bd4972 (svn r555) -newgrf: Preliminary support for action 0xE. Inhibit another GRF file by ID. It won't really work until we get stages support (pasky & octo).
darkvater
parents: 366
diff changeset
  4263
		/* Unset activation flag */
5557
dc2402eb851b (svn r7554) -Fix (r7496): In Action 0xE, don't deactivate the current GRF (to be ported to 0.5)
peter1138
parents: 5340
diff changeset
  4264
		if (file != NULL && file != _cur_grfconfig) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4265
			grfmsg(2, "GRFInhibit: Deactivating file '%s'", file->filename);
6555
c27c9d5b459f (svn r9031) -Codechange: Introduce grfconfig->status, and use it for states that are
maedhros
parents: 6519
diff changeset
  4266
			file->status = GCS_DISABLED;
367
d0d895bd4972 (svn r555) -newgrf: Preliminary support for action 0xE. Inhibit another GRF file by ID. It won't really work until we get stages support (pasky & octo).
darkvater
parents: 366
diff changeset
  4267
		}
d0d895bd4972 (svn r555) -newgrf: Preliminary support for action 0xE. Inhibit another GRF file by ID. It won't really work until we get stages support (pasky & octo).
darkvater
parents: 366
diff changeset
  4268
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  4269
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  4270
7452
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4271
/* Action 0x0F */
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4272
static void FeatureTownName(byte *buf, int len)
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4273
{
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4274
	/* <0F> <id> <style-name> <num-parts> <parts>
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4275
	 *
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4276
	 * B id          ID of this definition in bottom 7 bits (final definition if bit 7 set)
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4277
	 * V style-name  Name of the style (only for final definition)
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4278
	 * B num-parts   Number of parts in this definition
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4279
	 * V parts       The parts */
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4280
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4281
	if (!check_length(len, 1, "FeatureTownName: definition ID")) return;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4282
	buf++; len--;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4283
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4284
	uint32 grfid = _cur_grffile->grfid;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4285
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4286
	GRFTownName *townname = AddGRFTownName(grfid);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4287
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4288
	byte id = grf_load_byte(&buf);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4289
	len--;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4290
	grfmsg(6, "FeatureTownName: definition 0x%02X", id & 0x7F);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4291
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4292
	if (HASBIT(id, 7)) {
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4293
		/* Final definition */
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4294
		CLRBIT(id, 7);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4295
		bool new_scheme = _cur_grffile->grf_version >= 7;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4296
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4297
		if (!check_length(len, 1, "FeatureTownName: lang_id")) return;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4298
		byte lang = grf_load_byte(&buf);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4299
		len--;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4300
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4301
		byte nb_gen = townname->nb_gen;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4302
		do {
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4303
			CLRBIT(lang, 7);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4304
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4305
			if (!check_length(len, 1, "FeatureTownName: style name")) return;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4306
			const char *name = grf_load_string(&buf, len);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4307
			len -= strlen(name) + 1;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4308
			grfmsg(6, "FeatureTownName: lang 0x%X -> '%s'", lang, TranslateTTDPatchCodes(name));
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4309
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4310
			townname->name[nb_gen] = AddGRFString(grfid, id, lang, new_scheme, name, STR_UNDEFINED);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4311
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4312
			if (!check_length(len, 1, "FeatureTownName: lang_id")) return;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4313
			lang = grf_load_byte(&buf);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4314
			len--;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4315
		} while (lang != 0);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4316
		townname->id[nb_gen] = id;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4317
		townname->nb_gen++;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4318
	}
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4319
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4320
	if (!check_length(len, 1, "FeatureTownName: number of parts")) return;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4321
	byte nb = grf_load_byte(&buf);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4322
	len--;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4323
	grfmsg(6, "FeatureTownName: %d parts", nb, nb);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4324
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4325
	townname->nbparts[id] = nb;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4326
	townname->partlist[id] = CallocT<NamePartList>(nb);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4327
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4328
	for (int i = 0; i < nb; i++) {
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4329
		if (!check_length(len, 3, "FeatureTownName: parts header")) return;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4330
		byte nbtext =  grf_load_byte(&buf);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4331
		townname->partlist[id][i].bitstart  = grf_load_byte(&buf);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4332
		townname->partlist[id][i].bitcount  = grf_load_byte(&buf);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4333
		townname->partlist[id][i].maxprob   = 0;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4334
		townname->partlist[id][i].partcount = nbtext;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4335
		townname->partlist[id][i].parts     = CallocT<NamePart>(nbtext);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4336
		len -= 3;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4337
		grfmsg(6, "FeatureTownName: part %d contains %d texts and will use GB(seed, %d, %d)", i, nbtext, townname->partlist[id][i].bitstart, townname->partlist[id][i].bitcount);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4338
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4339
		for (int j = 0; j < nbtext; j++) {
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4340
			if (!check_length(len, 2, "FeatureTownName: part")) return;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4341
			byte prob = grf_load_byte(&buf);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4342
			len--;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4343
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4344
			if (HASBIT(prob, 7)) {
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4345
				byte ref_id = grf_load_byte(&buf);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4346
				len--;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4347
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4348
				if (townname->nbparts[ref_id] == 0) {
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4349
					grfmsg(0, "FeatureTownName: definition 0x%02X doesn't exist, deactivating", ref_id);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4350
					DelGRFTownName(grfid);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4351
					_cur_grfconfig->status = GCS_DISABLED;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4352
					_skip_sprites = -1;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4353
					return;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4354
				}
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4355
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4356
				grfmsg(6, "FeatureTownName: part %d, text %d, uses intermediate definition 0x%02X (with probability %d)", i, j, ref_id, prob & 0x7F);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4357
				townname->partlist[id][i].parts[j].data.id = ref_id;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4358
			} else {
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4359
				const char *text = grf_load_string(&buf, len);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4360
				len -= strlen(text) + 1;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4361
				townname->partlist[id][i].parts[j].data.text = TranslateTTDPatchCodes(text);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4362
				grfmsg(6, "FeatureTownName: part %d, text %d, '%s' (with probability %d)", i, j, townname->partlist[id][i].parts[j].data.text, prob);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4363
			}
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4364
			townname->partlist[id][i].parts[j].prob = prob;
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4365
			townname->partlist[id][i].maxprob += GB(prob, 0, 7);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4366
		}
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4367
		grfmsg(6, "FeatureTownName: part %d, total probability %d", i, townname->partlist[id][i].maxprob);
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4368
	}
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4369
}
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4370
3715
dd9807bf5927 (svn r4658) - NewGRF: add Action 0xNN comments before each action handler. This mainly aids code navigation...
peter1138
parents: 3714
diff changeset
  4371
/* Action 0x10 */
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4372
static void DefineGotoLabel(byte *buf, int len)
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4373
{
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4374
	/* <10> <label> [<comment>]
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4375
	 *
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4376
	 * B label      The label to define
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4377
	 * V comment    Optional comment - ignored */
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4378
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  4379
	if (!check_length(len, 1, "DefineGotoLabel")) return;
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4380
	buf++; len--;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4381
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4382
	GRFLabel *label = MallocT<GRFLabel>(1);
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4383
	label->label    = grf_load_byte(&buf);
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4384
	label->nfo_line = _nfo_line;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4385
	label->pos      = FioGetPos();
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4386
	label->next     = NULL;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4387
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4388
	/* Set up a linked list of goto targets which we will search in an Action 0x7/0x9 */
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4389
	if (_cur_grffile->label == NULL) {
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4390
		_cur_grffile->label = label;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4391
	} else {
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4392
		/* Attach the label to the end of the list */
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4393
		GRFLabel *l;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4394
		for (l = _cur_grffile->label; l->next != NULL; l = l->next);
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4395
		l->next = label;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4396
	}
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4397
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4398
	grfmsg(2, "DefineGotoLabel: GOTO target with label 0x%02X", label->label);
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4399
}
363
cf3cee5f33b4 (svn r551) -newgrf: Preliminary support for TTDPatch flags checking (we just pretend that a bunch of things are on and the rest is off and that's it). Patch by octo, small cleanup by pasky.
darkvater
parents: 362
diff changeset
  4400
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4401
/* Action 0x11 */
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4402
static void GRFSound(byte *buf, int len)
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4403
{
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4404
	/* <11> <num>
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4405
	 *
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4406
	 * W num      Number of sound files that follow */
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4407
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  4408
	if (!check_length(len, 1, "GRFSound")) return;
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4409
	buf++;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4410
	uint16 num = grf_load_word(&buf);
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4411
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4412
	_grf_data_blocks = num;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4413
	_grf_data_type   = GDT_SOUND;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4414
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4415
	if (_cur_grffile->sound_offset == 0) _cur_grffile->sound_offset = GetNumSounds();
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4416
}
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4417
4818
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4418
static void ImportGRFSound(byte *buf, int len)
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4419
{
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4420
	const GRFFile *file;
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4421
	FileEntry *se = AllocateFileEntry();
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4422
	uint32 grfid = grf_load_dword(&buf);
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4423
	uint16 sound = grf_load_word(&buf);
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4424
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4425
	file = GetFileByGRFID(grfid);
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4426
	if (file == NULL || file->sound_offset == 0) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4427
		grfmsg(1, "ImportGRFSound: Source file not available");
4818
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4428
		return;
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4429
	}
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4430
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4431
	if (file->sound_offset + sound >= GetNumSounds()) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4432
		grfmsg(1, "ImportGRFSound: Sound effect %d is invalid", sound);
4818
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4433
		return;
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4434
	}
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4435
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4436
	grfmsg(2, "ImportGRFSound: Copying sound %d (%d) from file %X", sound, file->sound_offset + sound, grfid);
4818
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4437
5024
f13f2f2d43f9 (svn r7065) Use simple assignment instead of memcpy()
tron
parents: 5011
diff changeset
  4438
	*se = *GetSound(file->sound_offset + sound);
4818
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4439
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4440
	/* Reset volume and priority, which TTDPatch doesn't copy */
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4441
	se->volume   = 128;
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4442
	se->priority = 0;
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4443
}
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4444
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4445
/* 'Action 0xFE' */
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4446
static void GRFImportBlock(byte *buf, int len)
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4447
{
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4448
	if (_grf_data_blocks == 0) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4449
		grfmsg(2, "GRFImportBlock: Unexpected import block, skipping");
4818
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4450
		return;
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4451
	}
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4452
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4453
	buf++;
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4454
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4455
	_grf_data_blocks--;
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4456
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4457
	/* XXX 'Action 0xFE' isn't really specified. It is only mentioned for
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4458
	 * importing sounds, so this is probably all wrong... */
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4459
	if (grf_load_byte(&buf) != _grf_data_type) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4460
		grfmsg(1, "GRFImportBlock: Import type mismatch");
4818
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4461
	}
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4462
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4463
	switch (_grf_data_type) {
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4464
		case GDT_SOUND: ImportGRFSound(buf, len - 1); break;
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4465
		default: NOT_REACHED(); break;
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4466
	}
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4467
}
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  4468
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4469
static void LoadGRFSound(byte *buf, int len)
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4470
{
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4471
	byte *buf_start = buf;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4472
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4473
	/* Allocate a sound entry. This is done even if the data is not loaded
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4474
	 * so that the indices used elsewhere are still correct. */
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4475
	FileEntry *se = AllocateFileEntry();
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4476
5567
2af6b4aa2833 (svn r7564) -Codechange: Some newgrf changes. FFIR/EVAW endian-swapping, functionalize
Darkvater
parents: 5557
diff changeset
  4477
	if (grf_load_dword(&buf) != BSWAP32('RIFF')) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4478
		grfmsg(1, "LoadGRFSound: Missing RIFF header");
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4479
		return;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4480
	}
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4481
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4482
	/* Size of file -- we ignore this */
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4483
	grf_load_dword(&buf);
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4484
5567
2af6b4aa2833 (svn r7564) -Codechange: Some newgrf changes. FFIR/EVAW endian-swapping, functionalize
Darkvater
parents: 5557
diff changeset
  4485
	if (grf_load_dword(&buf) != BSWAP32('WAVE')) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4486
		grfmsg(1, "LoadGRFSound: Invalid RIFF type");
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4487
		return;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4488
	}
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4489
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4490
	for (;;) {
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4491
		uint32 tag  = grf_load_dword(&buf);
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4492
		uint32 size = grf_load_dword(&buf);
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4493
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4494
		switch (tag) {
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4495
			case ' tmf': // 'fmt '
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4496
				/* Audio format, must be 1 (PCM) */
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4497
				if (grf_load_word(&buf) != 1) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4498
					grfmsg(1, "LoadGRFSound: Invalid audio format");
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4499
					return;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4500
				}
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4501
				se->channels = grf_load_word(&buf);
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4502
				se->rate = grf_load_dword(&buf);
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4503
				grf_load_dword(&buf);
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4504
				grf_load_word(&buf);
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4505
				se->bits_per_sample = grf_load_word(&buf);
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4506
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4507
				/* Consume any extra bytes */
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4508
				for (; size > 16; size--) grf_load_byte(&buf);
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4509
				break;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4510
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4511
			case 'atad': // 'data'
8066
7acd480e05c9 (svn r11095) -Codechange: don't abuse 'file_pos' by storing the file_slot in it too, but use a nice seperate variable for it
truelight
parents: 7955
diff changeset
  4512
				se->file_size   = size;
7acd480e05c9 (svn r11095) -Codechange: don't abuse 'file_pos' by storing the file_slot in it too, but use a nice seperate variable for it
truelight
parents: 7955
diff changeset
  4513
				se->file_offset = FioGetPos() - (len - (buf - buf_start)) + 1;
7acd480e05c9 (svn r11095) -Codechange: don't abuse 'file_pos' by storing the file_slot in it too, but use a nice seperate variable for it
truelight
parents: 7955
diff changeset
  4514
				se->file_slot   = _file_index;
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4515
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4516
				/* Set default volume and priority */
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4517
				se->volume = 0x80;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4518
				se->priority = 0;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4519
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4520
				grfmsg(2, "LoadGRFSound: channels %u, sample rate %u, bits per sample %u, length %u", se->channels, se->rate, se->bits_per_sample, size);
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4521
				return;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4522
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4523
			default:
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4524
				se->file_size = 0;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4525
				return;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4526
		}
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4527
	}
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4528
}
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4529
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4530
/* Action 0x12 */
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4531
static void LoadFontGlyph(byte *buf, int len)
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4532
{
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4533
	/* <12> <num_def> <font_size> <num_char> <base_char>
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4534
	 *
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4535
	 * B num_def      Number of definitions
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4536
	 * B font_size    Size of font (0 = normal, 1 = small, 2 = large)
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4537
	 * B num_char     Number of consecutive glyphs
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4538
	 * W base_char    First character index */
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4539
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4540
	buf++; len--;
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  4541
	if (!check_length(len, 1, "LoadFontGlyph")) return;
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4542
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4543
	uint8 num_def = grf_load_byte(&buf);
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4544
5841
b36d6b560aaa (svn r8041) -Regression (r7564): [NewGRF] check_length should skip further processing if a length is too short, so give the function a return value
peter1138
parents: 5838
diff changeset
  4545
	if (!check_length(len, 1 + num_def * 4, "LoadFontGlyph")) return;
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4546
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4547
	for (uint i = 0; i < num_def; i++) {
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
  4548
		FontSize size    = (FontSize)grf_load_byte(&buf);
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4549
		uint8  num_char  = grf_load_byte(&buf);
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4550
		uint16 base_char = grf_load_word(&buf);
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4551
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4552
		grfmsg(7, "LoadFontGlyph: Loading %u glyph(s) at 0x%04X for size %u", num_char, base_char, size);
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4553
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4554
		for (uint c = 0; c < num_char; c++) {
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4555
			SetUnicodeGlyph(size, base_char + c, _cur_spriteid);
7404
fc0559157f16 (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: 7390
diff changeset
  4556
			LoadNextSprite(_cur_spriteid++, _file_index, _nfo_line);
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4557
			_nfo_line++;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4558
		}
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4559
	}
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4560
}
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5061
diff changeset
  4561
6560
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4562
/* Action 0x13 */
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4563
static void TranslateGRFStrings(byte *buf, int len)
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4564
{
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4565
	/* <13> <grfid> <num-ent> <offset> <text...>
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4566
	 *
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4567
	 * 4*B grfid     The GRFID of the file whose texts are to be translated
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4568
	 * B   num-ent   Number of strings
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4569
	 * W   offset    First text ID
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4570
	 * S   text...   Zero-terminated strings */
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4571
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4572
	buf++; len--;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4573
	if (!check_length(len, 7, "TranslateGRFString")) return;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4574
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4575
	uint32 grfid = grf_load_dword(&buf);
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4576
	const GRFConfig *c = GetGRFConfig(grfid);
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4577
	if (c == NULL || (c->status != GCS_INITIALISED && c->status != GCS_ACTIVATED)) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  4578
		grfmsg(7, "TranslateGRFStrings: GRFID 0x%08x unknown, skipping action 13", BSWAP32(grfid));
6560
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4579
		return;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4580
	}
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4581
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4582
	if (c->status == GCS_INITIALISED) {
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4583
		/* If the file is not active but will be activated later, give an error
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4584
		 * and disable this file. */
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4585
		GRFError *error = CallocT<GRFError>(1);
7369
26325201d4d7 (svn r10114) -Fix: Only load newgrf error messages if the language matches the current
maedhros
parents: 7366
diff changeset
  4586
26325201d4d7 (svn r10114) -Fix: Only load newgrf error messages if the language matches the current
maedhros
parents: 7366
diff changeset
  4587
		char tmp[256];
26325201d4d7 (svn r10114) -Fix: Only load newgrf error messages if the language matches the current
maedhros
parents: 7366
diff changeset
  4588
		GetString(tmp, STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE, lastof(tmp));
26325201d4d7 (svn r10114) -Fix: Only load newgrf error messages if the language matches the current
maedhros
parents: 7366
diff changeset
  4589
		error->data = strdup(tmp);
26325201d4d7 (svn r10114) -Fix: Only load newgrf error messages if the language matches the current
maedhros
parents: 7366
diff changeset
  4590
6560
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4591
		error->message  = STR_NEWGRF_ERROR_LOAD_AFTER;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4592
		error->severity = STR_NEWGRF_ERROR_MSG_FATAL;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4593
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4594
		if (_cur_grfconfig->error != NULL) free(_cur_grfconfig->error);
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4595
		_cur_grfconfig->error = error;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4596
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4597
		_cur_grfconfig->status = GCS_DISABLED;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4598
		_skip_sprites = -1;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4599
		return;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4600
	}
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4601
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4602
	byte num_strings = grf_load_byte(&buf);
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4603
	uint16 first_id  = grf_load_word(&buf);
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4604
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4605
	if (!((first_id >= 0xD000 && first_id + num_strings <= 0xD3FF) || (first_id >= 0xDC00 && first_id + num_strings <= 0xDCFF))) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  4606
		grfmsg(7, "TranslateGRFStrings: Attempting to set out-of-range string IDs in action 13 (first: 0x%4X, number: 0x%2X)", first_id, num_strings);
6560
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4607
		return;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4608
	}
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4609
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4610
	len -= 7;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4611
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4612
	for (uint i = 0; i < num_strings && len > 0; i++) {
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4613
		const char *string   = grf_load_string(&buf, len);
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4614
		size_t string_length = strlen(string) + 1;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4615
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4616
		len -= (int)string_length;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4617
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4618
		if (string_length == 1) {
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4619
			grfmsg(7, "TranslateGRFString: Ignoring empty string.");
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4620
			continue;
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4621
		}
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4622
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4623
		/* Since no language id is supplied this string has to be added as a
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4624
		 * generic string, thus the language id of 0x7F. For this to work
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4625
		 * new_scheme has to be true as well. A language id of 0x7F will be
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4626
		 * overridden by a non-generic id, so this will not change anything if
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4627
		 * a string has been provided specifically for this language. */
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4628
		AddGRFString(grfid, first_id + i, 0x7F, true, string, STR_UNDEFINED);
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4629
	}
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4630
}
ff59c862deae (svn r9037) -Feature: [NewGRF] Add support for Action 13, which allows you to translate
maedhros
parents: 6555
diff changeset
  4631
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4632
/* 'Action 0xFF' */
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4633
static void GRFDataBlock(byte *buf, int len)
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4634
{
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4635
	if (_grf_data_blocks == 0) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4636
		grfmsg(2, "GRFDataBlock: unexpected data block, skipping");
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4637
		return;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4638
	}
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4639
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4640
	buf++;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4641
	uint8 name_len = grf_load_byte(&buf);
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4642
	const char *name = (const char *)buf;
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4643
	buf += name_len + 1;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4644
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  4645
	grfmsg(2, "GRFDataBlock: block name '%s'...", name);
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4646
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4647
	_grf_data_blocks--;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4648
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4649
	switch (_grf_data_type) {
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4650
		case GDT_SOUND: LoadGRFSound(buf, len - name_len - 2); break;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4651
		default: NOT_REACHED(); break;
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4652
	}
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4653
}
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4654
5329
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  4655
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  4656
/* Used during safety scan on unsafe actions */
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  4657
static void GRFUnsafe(byte *buf, int len)
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  4658
{
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  4659
	SETBIT(_cur_grfconfig->flags, GCF_UNSAFE);
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  4660
5753
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4661
	/* Skip remainder of GRF */
788f8d55eb54 (svn r7795) -Codechange: [NewGRF] When safety checking, allow an Action E that force activates the GRF. Unfortunately this requires knowing the GRF ID in advance (before the Action 8) so the static GRFs are now scanned twice on start up, once for the GRF ID, and then for the safety check. (This fix allows unifont.grf to be used.)
peter1138
parents: 5727
diff changeset
  4662
	_skip_sprites = -1;
5329
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  4663
}
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  4664
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  4665
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6560
diff changeset
  4666
static void InitializeGRFSpecial()
363
cf3cee5f33b4 (svn r551) -newgrf: Preliminary support for TTDPatch flags checking (we just pretend that a bunch of things are on and the rest is off and that's it). Patch by octo, small cleanup by pasky.
darkvater
parents: 362
diff changeset
  4667
{
4381
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4668
	_ttdpatch_flags[0] =  ((_patches.always_small_airport ? 1 : 0) << 0x0C)  // keepsmallairport
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4669
	                   |                                        (1 << 0x0D)  // newairports
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4670
	                   |                                        (1 << 0x0E)  // largestations
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4671
	                   |           ((_patches.longbridges ? 1 : 0) << 0x0F)  // longbridges
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4672
	                   |                                        (0 << 0x10)  // loadtime
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4673
	                   |                                        (1 << 0x12)  // presignals
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4674
	                   |                                        (1 << 0x13)  // extpresignals
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4675
	                   | ((_patches.never_expire_vehicles ? 1 : 0) << 0x16)  // enginespersist
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4676
	                   |                                        (1 << 0x1B)  // multihead
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4677
	                   |                                        (1 << 0x1D)  // lowmemory
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4678
	                   |                                        (1 << 0x1E); // generalfixes
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4679
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4680
	_ttdpatch_flags[1] =                                        (0 << 0x07)  // moreairports - based on units of noise
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4681
	                   |        ((_patches.mammoth_trains ? 1 : 0) << 0x08)  // mammothtrains
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4682
	                   |                                        (1 << 0x09)  // trainrefit
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4683
	                   |                                        (0 << 0x0B)  // subsidiaries
5801
7d14e62bc9f3 (svn r7930) -Fix: [FS#520] Wrong GRF flag set for gradual loading (mart3p)
Darkvater
parents: 5776
diff changeset
  4684
	                   |       ((_patches.gradual_loading ? 1 : 0) << 0x0C)  // gradualloading
4381
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4685
	                   |                                        (1 << 0x12)  // unifiedmaglevmode - set bit 0 mode. Not revelant to OTTD
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4686
	                   |                                        (1 << 0x13)  // unifiedmaglevmode - set bit 1 mode
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4687
	                   |                                        (1 << 0x14)  // bridgespeedlimits
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4688
	                   |                                        (1 << 0x16)  // eternalgame
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4689
	                   |                                        (1 << 0x17)  // newtrains
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4690
	                   |                                        (1 << 0x18)  // newrvs
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4691
	                   |                                        (1 << 0x19)  // newships
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4692
	                   |                                        (1 << 0x1A)  // newplanes
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4693
	                   |           ((_patches.signal_side ? 1 : 0) << 0x1B)  // signalsontrafficside
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4694
	                   |                                        (1 << 0x1C); // electrifiedrailway
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4695
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4696
	_ttdpatch_flags[2] =                                        (1 << 0x01)  // loadallgraphics - obsolote
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4697
	                   |                                        (1 << 0x03)  // semaphores
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4698
	                   |                                        (0 << 0x0B)  // enhancedgui
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4699
	                   |                                        (0 << 0x0C)  // newagerating
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4700
	                   |       ((_patches.build_on_slopes ? 1 : 0) << 0x0D)  // buildonslopes
7003
002f14bf45e0 (svn r9690) -Codechange: Update another couple of NewGRF TTDPatch flags
peter1138
parents: 6999
diff changeset
  4701
	                   |         ((_patches.full_load_any ? 1 : 0) << 0x0E)  // fullloadany
7390
00eb344ff13f (svn r10141) -Fix (FS#848, r8973): Set the newgrf bit for realistic plane speeds (bulb)
celestar
parents: 7381
diff changeset
  4702
	                   |                                        (1 << 0x0F)  // planespeed - TODO depends on patch when implemented
4381
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4703
	                   |                                        (0 << 0x10)  // moreindustriesperclimate - obsolete
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4704
	                   |                                        (0 << 0x11)  // moretoylandfeatures
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4705
	                   |                                        (1 << 0x12)  // newstations
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4706
	                   |                                        (0 << 0x13)  // tracktypecostdiff
6999
e0f7feb68658 (svn r9686) -Codechange: Update a couple of NewGRF TTDPatch flags
peter1138
parents: 6988
diff changeset
  4707
	                   |                                        (1 << 0x14)  // manualconvert
4381
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4708
	                   |       ((_patches.build_on_slopes ? 1 : 0) << 0x15)  // buildoncoasts
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4709
	                   |                                        (1 << 0x16)  // canals
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4710
	                   |                                        (1 << 0x17)  // newstartyear
6999
e0f7feb68658 (svn r9686) -Codechange: Update a couple of NewGRF TTDPatch flags
peter1138
parents: 6988
diff changeset
  4711
	                   |    ((_patches.freight_trains > 1 ? 1 : 0) << 0x18)  // freighttrains
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4712
	                   |                                        (1 << 0x19)  // newhouses
4381
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4713
	                   |                                        (1 << 0x1A)  // newbridges
7452
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4714
	                   |                                        (1 << 0x1B)  // newtownnames
4381
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4715
	                   |                                        (0 << 0x1C)  // moreanimations
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4716
	                   |    ((_patches.wagon_speed_limits ? 1 : 0) << 0x1D)  // wagonspeedlimits
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4717
	                   |                                        (1 << 0x1E)  // newshistory
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4718
	                   |                                        (0 << 0x1F); // custombridgeheads
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4719
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4720
	_ttdpatch_flags[3] =                                        (0 << 0x00)  // newcargodistribution
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4721
	                   |                                        (1 << 0x01)  // windowsnap
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4722
	                   |                                        (0 << 0x02)  // townbuildnoroad
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4723
	                   |                                        (0 << 0x03)  // pathbasedsignalling. To enable if ever pbs is back
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4724
	                   |                                        (0 << 0x04)  // aichoosechance
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4725
	                   |                                        (1 << 0x05)  // resolutionwidth
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4726
	                   |                                        (1 << 0x06)  // resolutionheight
7142
2061428f1937 (svn r9877) -Revert (r9876): one file too many...
peter1138
parents: 7141
diff changeset
  4727
	                   |                                        (0 << 0x07)  // newindustries
7119
8ec832426743 (svn r9843) -Fix (r9838): tell the newgrfs that we now support proper FIFO loading.
rubidium
parents: 7103
diff changeset
  4728
	                   |         ((_patches.improved_load ? 1 : 0) << 0x08)  // fifoloading
4381
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4729
	                   |                                        (0 << 0x09)  // townroadbranchprob
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4730
	                   |                                        (0 << 0x0A)  // tempsnowline
6959
0066ab0d9b93 (svn r9638) -Feature: Increase cargo types from 12 to 32 and enable newcargo flag in NewGRF loader.
peter1138
parents: 6957
diff changeset
  4731
	                   |                                        (1 << 0x0B)  // newcargo
4381
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4732
	                   |                                        (1 << 0x0C)  // enhancemultiplayer
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4733
	                   |                                        (1 << 0x0D)  // onewayroads
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4734
	                   |   ((_patches.nonuniform_stations ? 1 : 0) << 0x0E)  // irregularstations
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4735
	                   |                                        (1 << 0x0F)  // statistics
4657
188335e8d316 (svn r6533) - Fix (r6532): Somebody forgot to add newsounds to the ttdpatch flags...
peter1138
parents: 4656
diff changeset
  4736
	                   |                                        (1 << 0x10)  // newsounds
4381
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4737
	                   |                                        (1 << 0x11)  // autoreplace
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4738
	                   |                                        (1 << 0x12)  // autoslope
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4739
	                   |                                        (0 << 0x13)  // followvehicle
7187
f7dc3204d457 (svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents: 7182
diff changeset
  4740
	                   |                                        (1 << 0x14)  // trams
4381
c1af6c934040 (svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
belugas
parents: 4377
diff changeset
  4741
	                   |                                        (0 << 0x15)  // enhancetunnels
7353
716c6dd9322a (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents: 7344
diff changeset
  4742
	                   |                                        (1 << 0x16)  // shortrvs
716c6dd9322a (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents: 7344
diff changeset
  4743
	                   |                                        (1 << 0x17)  // articulatedrvs
7003
002f14bf45e0 (svn r9690) -Codechange: Update another couple of NewGRF TTDPatch flags
peter1138
parents: 6999
diff changeset
  4744
	                   |                                        (1 << 0x1E); // variablerunningcosts
363
cf3cee5f33b4 (svn r551) -newgrf: Preliminary support for TTDPatch flags checking (we just pretend that a bunch of things are on and the rest is off and that's it). Patch by octo, small cleanup by pasky.
darkvater
parents: 362
diff changeset
  4745
}
cf3cee5f33b4 (svn r551) -newgrf: Preliminary support for TTDPatch flags checking (we just pretend that a bunch of things are on and the rest is off and that's it). Patch by octo, small cleanup by pasky.
darkvater
parents: 362
diff changeset
  4746
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6560
diff changeset
  4747
static void ResetCustomStations()
2625
66b3d632dcd2 (svn r3167) - NewGRF: Start moving custom station code to separate files.
peter1138
parents: 2624
diff changeset
  4748
{
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4749
	for (GRFFile *file = _first_grffile; file != NULL; file = file->next) {
3768
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
  4750
		if (file->stations == NULL) continue;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4751
		for (uint i = 0; i < MAX_STATIONS; i++) {
3768
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
  4752
			if (file->stations[i] == NULL) continue;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4753
			StationSpec *statspec = file->stations[i];
3740
00a9594628b1 (svn r4722) - Newstations: release station sprite layout data when uninitializing NewGRF data.
peter1138
parents: 3738
diff changeset
  4754
00a9594628b1 (svn r4722) - Newstations: release station sprite layout data when uninitializing NewGRF data.
peter1138
parents: 3738
diff changeset
  4755
			/* Release renderdata, if it wasn't copied from another custom station spec  */
00a9594628b1 (svn r4722) - Newstations: release station sprite layout data when uninitializing NewGRF data.
peter1138
parents: 3738
diff changeset
  4756
			if (!statspec->copied_renderdata) {
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4757
				for (uint t = 0; t < statspec->tiles; t++) {
3740
00a9594628b1 (svn r4722) - Newstations: release station sprite layout data when uninitializing NewGRF data.
peter1138
parents: 3738
diff changeset
  4758
					free((void*)statspec->renderdata[t].seq);
00a9594628b1 (svn r4722) - Newstations: release station sprite layout data when uninitializing NewGRF data.
peter1138
parents: 3738
diff changeset
  4759
				}
00a9594628b1 (svn r4722) - Newstations: release station sprite layout data when uninitializing NewGRF data.
peter1138
parents: 3738
diff changeset
  4760
				free(statspec->renderdata);
00a9594628b1 (svn r4722) - Newstations: release station sprite layout data when uninitializing NewGRF data.
peter1138
parents: 3738
diff changeset
  4761
			}
00a9594628b1 (svn r4722) - Newstations: release station sprite layout data when uninitializing NewGRF data.
peter1138
parents: 3738
diff changeset
  4762
5061
cb097749d18f (svn r7114) -Codechange: [NewStations] Free up custom station layouts
peter1138
parents: 5060
diff changeset
  4763
			/* Release platforms and layouts */
cb097749d18f (svn r7114) -Codechange: [NewStations] Free up custom station layouts
peter1138
parents: 5060
diff changeset
  4764
			if (!statspec->copied_layouts) {
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4765
				for (uint l = 0; l < statspec->lengths; l++) {
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4766
					for (uint p = 0; p < statspec->platforms[l]; p++) {
5061
cb097749d18f (svn r7114) -Codechange: [NewStations] Free up custom station layouts
peter1138
parents: 5060
diff changeset
  4767
						free(statspec->layouts[l][p]);
cb097749d18f (svn r7114) -Codechange: [NewStations] Free up custom station layouts
peter1138
parents: 5060
diff changeset
  4768
					}
cb097749d18f (svn r7114) -Codechange: [NewStations] Free up custom station layouts
peter1138
parents: 5060
diff changeset
  4769
					free(statspec->layouts[l]);
cb097749d18f (svn r7114) -Codechange: [NewStations] Free up custom station layouts
peter1138
parents: 5060
diff changeset
  4770
				}
cb097749d18f (svn r7114) -Codechange: [NewStations] Free up custom station layouts
peter1138
parents: 5060
diff changeset
  4771
				free(statspec->layouts);
cb097749d18f (svn r7114) -Codechange: [NewStations] Free up custom station layouts
peter1138
parents: 5060
diff changeset
  4772
				free(statspec->platforms);
cb097749d18f (svn r7114) -Codechange: [NewStations] Free up custom station layouts
peter1138
parents: 5060
diff changeset
  4773
			}
3768
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
  4774
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
  4775
			/* Release this station */
46d328178509 (svn r4760) - Newstations: change the way custom stations are allocated when loading from GRF, as the current way was flawed (reallocing memory which is referenced elsewhere)
peter1138
parents: 3761
diff changeset
  4776
			free(statspec);
2625
66b3d632dcd2 (svn r3167) - NewGRF: Start moving custom station code to separate files.
peter1138
parents: 2624
diff changeset
  4777
		}
3501
cf7d2c33e7fc (svn r4352) - NewGRF Codechange: dynamically allocate the memory used to store custom station data. This saves us approximately 40KB per GRF file, if there are no stations defined.
peter1138
parents: 3488
diff changeset
  4778
cf7d2c33e7fc (svn r4352) - NewGRF Codechange: dynamically allocate the memory used to store custom station data. This saves us approximately 40KB per GRF file, if there are no stations defined.
peter1138
parents: 3488
diff changeset
  4779
		/* Free and reset the station data */
cf7d2c33e7fc (svn r4352) - NewGRF Codechange: dynamically allocate the memory used to store custom station data. This saves us approximately 40KB per GRF file, if there are no stations defined.
peter1138
parents: 3488
diff changeset
  4780
		free(file->stations);
cf7d2c33e7fc (svn r4352) - NewGRF Codechange: dynamically allocate the memory used to store custom station data. This saves us approximately 40KB per GRF file, if there are no stations defined.
peter1138
parents: 3488
diff changeset
  4781
		file->stations = NULL;
2625
66b3d632dcd2 (svn r3167) - NewGRF: Start moving custom station code to separate files.
peter1138
parents: 2624
diff changeset
  4782
	}
66b3d632dcd2 (svn r3167) - NewGRF: Start moving custom station code to separate files.
peter1138
parents: 2624
diff changeset
  4783
}
66b3d632dcd2 (svn r3167) - NewGRF: Start moving custom station code to separate files.
peter1138
parents: 2624
diff changeset
  4784
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4785
static void ResetCustomHouses()
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4786
{
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4787
	GRFFile *file;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4788
	uint i;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4789
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4790
	for (file = _first_grffile; file != NULL; file = file->next) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4791
		if (file->housespec == NULL) continue;
7344
72e3e8607419 (svn r10088) -Codechange: A typo and a code-style
belugas
parents: 7330
diff changeset
  4792
		for (i = 0; i < HOUSE_MAX; i++) {
72e3e8607419 (svn r10088) -Codechange: A typo and a code-style
belugas
parents: 7330
diff changeset
  4793
			free(file->housespec[i]);
72e3e8607419 (svn r10088) -Codechange: A typo and a code-style
belugas
parents: 7330
diff changeset
  4794
		}
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4795
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4796
		free(file->housespec);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4797
		file->housespec = NULL;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4798
	}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4799
}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4800
7255
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4801
static void ResetCustomIndustries()
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4802
{
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4803
	GRFFile *file;
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4804
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4805
	for (file = _first_grffile; file != NULL; file = file->next) {
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4806
		uint i;
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4807
		/* We are verifiying both tiles and industries specs loaded from the grf file
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4808
		 * First, let's deal with industryspec */
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4809
		if (file->industryspec != NULL) {
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4810
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4811
			for (i = 0; i < NUM_INDUSTRYTYPES; i++) {
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4812
				IndustrySpec *ind = file->industryspec[i];
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4813
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4814
				if (ind != NULL) {
7261
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4815
					/* We need to remove the sounds array */
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4816
					if (HASBIT(ind->cleanup_flag, CLEAN_RANDOMSOUNDS)) {
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4817
						free((void*)ind->random_sounds);
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4818
					}
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4819
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4820
					/* We need to remove the tiles layouts */
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4821
					if (HASBIT(ind->cleanup_flag, CLEAN_TILELSAYOUT) && ind->table != NULL) {
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4822
						for (int j = 0; j < ind->num_table; j++) {
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4823
							/* remove the individual layouts */
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4824
							if (ind->table[j] != NULL) {
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4825
								free((IndustryTileTable*)ind->table[j]);
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4826
							}
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4827
						}
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4828
						/* remove the layouts pointers */
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4829
						free((IndustryTileTable**)ind->table);
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4830
						ind->table = NULL;
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4831
					}
a75c5668b75b (svn r10001) -Codechange: Add support for removing dynamically allocated newgrf data
belugas
parents: 7260
diff changeset
  4832
7255
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4833
					free(ind);
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4834
					ind = NULL;
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4835
				}
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4836
			}
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4837
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4838
			free(file->industryspec);
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4839
			file->industryspec = NULL;
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4840
		}
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4841
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4842
		if (file->indtspec != NULL) {
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4843
			for (i = 0; i < NUM_INDUSTRYTILES; i++) {
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4844
				if (file->indtspec[i] != NULL) {
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4845
					free(file->indtspec[i]);
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4846
					file->indtspec[i] = NULL;
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4847
				}
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4848
			}
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4849
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4850
			free(file->indtspec);
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4851
			file->indtspec = NULL;
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4852
		}
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4853
	}
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4854
}
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4855
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6560
diff changeset
  4856
static void ResetNewGRF()
4953
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4857
{
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4858
	GRFFile *next;
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4859
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4860
	for (GRFFile *f = _first_grffile; f != NULL; f = next) {
4953
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4861
		next = f->next;
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4862
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4863
		free(f->filename);
7180
6ecf06dd7299 (svn r9916) -Codechange: Free memory used by cargo translation tables
peter1138
parents: 7155
diff changeset
  4864
		free(f->cargo_list);
4953
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4865
		free(f);
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4866
	}
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4867
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4868
	_first_grffile = NULL;
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4869
	_cur_grffile   = NULL;
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4870
}
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4871
7366
3a76f142e0ab (svn r10110) -Fix: Reset NewGRF errors along with all the other NewGRF data so that errors get loaded again when pressing "Apply".
maedhros
parents: 7353
diff changeset
  4872
static void ResetNewGRFErrors()
3a76f142e0ab (svn r10110) -Fix: Reset NewGRF errors along with all the other NewGRF data so that errors get loaded again when pressing "Apply".
maedhros
parents: 7353
diff changeset
  4873
{
3a76f142e0ab (svn r10110) -Fix: Reset NewGRF errors along with all the other NewGRF data so that errors get loaded again when pressing "Apply".
maedhros
parents: 7353
diff changeset
  4874
	for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
3a76f142e0ab (svn r10110) -Fix: Reset NewGRF errors along with all the other NewGRF data so that errors get loaded again when pressing "Apply".
maedhros
parents: 7353
diff changeset
  4875
		if (!HASBIT(c->flags, GCF_COPY) && c->error != NULL) {
7369
26325201d4d7 (svn r10114) -Fix: Only load newgrf error messages if the language matches the current
maedhros
parents: 7366
diff changeset
  4876
			free(c->error->custom_message);
26325201d4d7 (svn r10114) -Fix: Only load newgrf error messages if the language matches the current
maedhros
parents: 7366
diff changeset
  4877
			free(c->error->data);
7366
3a76f142e0ab (svn r10110) -Fix: Reset NewGRF errors along with all the other NewGRF data so that errors get loaded again when pressing "Apply".
maedhros
parents: 7353
diff changeset
  4878
			free(c->error);
3a76f142e0ab (svn r10110) -Fix: Reset NewGRF errors along with all the other NewGRF data so that errors get loaded again when pressing "Apply".
maedhros
parents: 7353
diff changeset
  4879
			c->error = NULL;
3a76f142e0ab (svn r10110) -Fix: Reset NewGRF errors along with all the other NewGRF data so that errors get loaded again when pressing "Apply".
maedhros
parents: 7353
diff changeset
  4880
		}
3a76f142e0ab (svn r10110) -Fix: Reset NewGRF errors along with all the other NewGRF data so that errors get loaded again when pressing "Apply".
maedhros
parents: 7353
diff changeset
  4881
	}
3a76f142e0ab (svn r10110) -Fix: Reset NewGRF errors along with all the other NewGRF data so that errors get loaded again when pressing "Apply".
maedhros
parents: 7353
diff changeset
  4882
}
3a76f142e0ab (svn r10110) -Fix: Reset NewGRF errors along with all the other NewGRF data so that errors get loaded again when pressing "Apply".
maedhros
parents: 7353
diff changeset
  4883
2491
dfe9542f783e (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
  4884
/**
2463
de2605ed3758 (svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents: 2458
diff changeset
  4885
 * Reset all NewGRF loaded data
de2605ed3758 (svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents: 2458
diff changeset
  4886
 * TODO
de2605ed3758 (svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents: 2458
diff changeset
  4887
 */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6560
diff changeset
  4888
static void ResetNewGRFData()
2463
de2605ed3758 (svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents: 2458
diff changeset
  4889
{
3601
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  4890
	CleanUpStrings();
7452
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  4891
	CleanUpGRFTownNames();
3601
ac6df06db648 (svn r4493) Newgrf : Action 04. Beginning of implementation.
belugas
parents: 3595
diff changeset
  4892
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4893
	/* Copy/reset original engine info data */
2463
de2605ed3758 (svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents: 2458
diff changeset
  4894
	memcpy(&_engine_info, &orig_engine_info, sizeof(orig_engine_info));
de2605ed3758 (svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents: 2458
diff changeset
  4895
	memcpy(&_rail_vehicle_info, &orig_rail_vehicle_info, sizeof(orig_rail_vehicle_info));
de2605ed3758 (svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents: 2458
diff changeset
  4896
	memcpy(&_ship_vehicle_info, &orig_ship_vehicle_info, sizeof(orig_ship_vehicle_info));
de2605ed3758 (svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents: 2458
diff changeset
  4897
	memcpy(&_aircraft_vehicle_info, &orig_aircraft_vehicle_info, sizeof(orig_aircraft_vehicle_info));
de2605ed3758 (svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents: 2458
diff changeset
  4898
	memcpy(&_road_vehicle_info, &orig_road_vehicle_info, sizeof(orig_road_vehicle_info));
2478
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  4899
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4900
	/* Copy/reset original bridge info data
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4901
	 * First, free sprite table data */
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4902
	for (uint i = 0; i < MAX_BRIDGES; i++) {
2478
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  4903
		if (_bridge[i].sprite_table != NULL) {
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4904
			for (uint j = 0; j < 7; j++) free(_bridge[i].sprite_table[j]);
2478
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  4905
			free(_bridge[i].sprite_table);
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  4906
		}
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  4907
	}
16b05f1de6bb (svn r3004) -Feature, NewGRF: Support loading of bridge attributes and tables from GRF. Currently drawing tall pillars uses old data.
peter1138
parents: 2476
diff changeset
  4908
	memcpy(&_bridge, &orig_bridge, sizeof(_bridge));
2491
dfe9542f783e (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
  4909
6675
5e9d65c32e60 (svn r9387) -Fix (r9385): termination of a comment forgotten.
rubidium
parents: 6674
diff changeset
  4910
	/* Reset refit/cargo class data */
2611
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  4911
	memset(&cargo_allowed, 0, sizeof(cargo_allowed));
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  4912
	memset(&cargo_disallowed, 0, sizeof(cargo_disallowed));
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  4913
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4914
	/* Reset GRM reservations */
4961
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4915
	memset(&_grm_engines, 0, sizeof(_grm_engines));
7277
eddd0a777e8b (svn r10019) -Codechange: Implement GRM for newcargos
peter1138
parents: 7265
diff changeset
  4916
	memset(&_grm_cargos, 0, sizeof(_grm_cargos));
4961
0ba3cfeaff61 (svn r6960) - Feature: NewGRF: Implement some support for GRF Resource Management (GRM)
peter1138
parents: 4953
diff changeset
  4917
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4918
	/* Unload sprite group data */
2491
dfe9542f783e (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
  4919
	UnloadWagonOverrides();
3695
aae28fa7190e (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3694
diff changeset
  4920
	UnloadRotorOverrideSprites();
2491
dfe9542f783e (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
  4921
	UnloadCustomEngineSprites();
2769
acea0abd2195 (svn r3316) - NewGRF: Unload engine names before loading grf files. This fixes names in climates where the engines don't get loaded. Renamed function to reflect its purpose.
peter1138
parents: 2766
diff changeset
  4922
	UnloadCustomEngineNames();
2971
9b62397dbd56 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
  4923
	ResetEngineListOrder();
2506
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  4924
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4925
	/* Reset price base data */
2506
777ac2d9a98a (svn r3032) -NewGRF, Feature: Add support for changing base prices.
peter1138
parents: 2491
diff changeset
  4926
	ResetPriceBaseMultipliers();
2625
66b3d632dcd2 (svn r3167) - NewGRF: Start moving custom station code to separate files.
peter1138
parents: 2624
diff changeset
  4927
4377
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  4928
	/* Reset the curencies array */
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  4929
	ResetCurrencies();
0fb9077b8173 (svn r6108) -NewGRF Feature: Implement currencies replacment via grf file.
belugas
parents: 4322
diff changeset
  4930
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4931
	/* Reset the house array */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4932
	ResetCustomHouses();
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4933
	ResetHouses();
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  4934
7239
68e722150cba (svn r9976) -Codechange: Declare a writable array of specs for industry and industry tiles.
belugas
parents: 7187
diff changeset
  4935
	/* Reset the industries structures*/
7255
8b6f5524dfbc (svn r9994) -Codechange: Add pointers for Industry and Industry Tiles in the grf file.
belugas
parents: 7239
diff changeset
  4936
	ResetCustomIndustries();
7239
68e722150cba (svn r9976) -Codechange: Declare a writable array of specs for industry and industry tiles.
belugas
parents: 7187
diff changeset
  4937
	ResetIndustries();
68e722150cba (svn r9976) -Codechange: Declare a writable array of specs for industry and industry tiles.
belugas
parents: 7187
diff changeset
  4938
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4939
	/* Reset station classes */
2625
66b3d632dcd2 (svn r3167) - NewGRF: Start moving custom station code to separate files.
peter1138
parents: 2624
diff changeset
  4940
	ResetStationClasses();
66b3d632dcd2 (svn r3167) - NewGRF: Start moving custom station code to separate files.
peter1138
parents: 2624
diff changeset
  4941
	ResetCustomStations();
2812
f250489941f9 (svn r3360) Fix initialization of engines for precalculation of default refit mask.
peter1138
parents: 2769
diff changeset
  4942
7079
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  4943
	/* Reset canal sprite groups */
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  4944
	memset(_canal_sg, 0, sizeof(_canal_sg));
35743c461482 (svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents: 7077
diff changeset
  4945
6669
487ac09b95c4 (svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros
parents: 6668
diff changeset
  4946
	/* Reset the snowline table. */
487ac09b95c4 (svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros
parents: 6668
diff changeset
  4947
	ClearSnowLine();
487ac09b95c4 (svn r9371) -Feature: Add support for variable snow lines in the arctic climate, supplied
maedhros
parents: 6668
diff changeset
  4948
4953
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4949
	/* Reset NewGRF files */
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4950
	ResetNewGRF();
6c40b2b16164 (svn r6948) - Codechange: Clear out all NewGRF file data before loading files again
peter1138
parents: 4952
diff changeset
  4951
7366
3a76f142e0ab (svn r10110) -Fix: Reset NewGRF errors along with all the other NewGRF data so that errors get loaded again when pressing "Apply".
maedhros
parents: 7353
diff changeset
  4952
	/* Reset NewGRF errors. */
3a76f142e0ab (svn r10110) -Fix: Reset NewGRF errors along with all the other NewGRF data so that errors get loaded again when pressing "Apply".
maedhros
parents: 7353
diff changeset
  4953
	ResetNewGRFErrors();
3a76f142e0ab (svn r10110) -Fix: Reset NewGRF errors along with all the other NewGRF data so that errors get loaded again when pressing "Apply".
maedhros
parents: 7353
diff changeset
  4954
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  4955
	/* Add engine type to engine data. This is needed for the refit precalculation. */
2812
f250489941f9 (svn r3360) Fix initialization of engines for precalculation of default refit mask.
peter1138
parents: 2769
diff changeset
  4956
	AddTypeToEngines();
3595
20621831cd46 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3593
diff changeset
  4957
6417
26acff62d001 (svn r8826) -Codechange: Replace _cargoc's separate arrays with a regular struct array (with accessor) and implement new initialization method using cargo labels.
peter1138
parents: 6416
diff changeset
  4958
	/* Set up the default cargo types */
26acff62d001 (svn r8826) -Codechange: Replace _cargoc's separate arrays with a regular struct array (with accessor) and implement new initialization method using cargo labels.
peter1138
parents: 6416
diff changeset
  4959
	SetupCargoForClimate(_opt.landscape);
26acff62d001 (svn r8826) -Codechange: Replace _cargoc's separate arrays with a regular struct array (with accessor) and implement new initialization method using cargo labels.
peter1138
parents: 6416
diff changeset
  4960
3845
c3cd4b825c2f (svn r4869) - NewGRF: support setting train list vehicle width to 32 instead of 29 pixels, for sets which use 32 pixel long engines/wagons.
peter1138
parents: 3825
diff changeset
  4961
	/* Reset misc GRF features and train list display variables */
c3cd4b825c2f (svn r4869) - NewGRF: support setting train list vehicle width to 32 instead of 29 pixels, for sets which use 32 pixel long engines/wagons.
peter1138
parents: 3825
diff changeset
  4962
	_misc_grf_features = 0;
c3cd4b825c2f (svn r4869) - NewGRF: support setting train list vehicle width to 32 instead of 29 pixels, for sets which use 32 pixel long engines/wagons.
peter1138
parents: 3825
diff changeset
  4963
	_traininfo_vehicle_pitch = 0;
c3cd4b825c2f (svn r4869) - NewGRF: support setting train list vehicle width to 32 instead of 29 pixels, for sets which use 32 pixel long engines/wagons.
peter1138
parents: 3825
diff changeset
  4964
	_traininfo_vehicle_width = 29;
7265
74148c363f9d (svn r10005) -Codechange: Merge two flags (2cc and newhouses) indicating some newgrf features have been loaded, and introduce the newindustry one.
belugas
parents: 7261
diff changeset
  4965
7410
358b83972e29 (svn r10167) -Codechange: Change the flagging system of grf loaded feature from a bitset to a bool evaluation.
belugas
parents: 7404
diff changeset
  4966
	_loaded_newgrf_features.has_2CC           = false;
358b83972e29 (svn r10167) -Codechange: Change the flagging system of grf loaded feature from a bitset to a bool evaluation.
belugas
parents: 7404
diff changeset
  4967
	_loaded_newgrf_features.has_newhouses     = false;
8157
e2506892a70f (svn r11192) -Fix: Little typo with bigger consequences when trying to remove a newindustries aware grf
belugas
parents: 8156
diff changeset
  4968
	_loaded_newgrf_features.has_newindustries = false;
7265
74148c363f9d (svn r10005) -Codechange: Merge two flags (2cc and newhouses) indicating some newgrf features have been loaded, and introduce the newindustry one.
belugas
parents: 7261
diff changeset
  4969
5209
fa3ad39e2fa7 (svn r7324) -Codechange: reset newgrf signal location data
peter1138
parents: 5161
diff changeset
  4970
	_signal_base = 0;
5210
dc52acfad05c (svn r7325) -Feature: Add support for action 5 type 0x0D, coast sprites.
peter1138
parents: 5209
diff changeset
  4971
	_coast_base = 0;
3845
c3cd4b825c2f (svn r4869) - NewGRF: support setting train list vehicle width to 32 instead of 29 pixels, for sets which use 32 pixel long engines/wagons.
peter1138
parents: 3825
diff changeset
  4972
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  4973
	InitializeSoundPool();
3595
20621831cd46 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3593
diff changeset
  4974
	InitializeSpriteGroupPool();
2463
de2605ed3758 (svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents: 2458
diff changeset
  4975
}
de2605ed3758 (svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents: 2458
diff changeset
  4976
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4977
/** Reset all NewGRFData that was used only while processing data */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6560
diff changeset
  4978
static void ClearTemporaryNewGRFData()
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4979
{
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4980
	/* Clear the GOTO labels used for GRF processing */
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  4981
	for (GRFLabel *l = _cur_grffile->label; l != NULL;) {
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4982
		GRFLabel *l2 = l->next;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4983
		free(l);
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4984
		l = l2;
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4985
	}
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4986
	_cur_grffile->label = NULL;
3595
20621831cd46 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3593
diff changeset
  4987
20621831cd46 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3593
diff changeset
  4988
	/* Clear the list of spritegroups */
20621831cd46 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3593
diff changeset
  4989
	free(_cur_grffile->spritegroups);
20621831cd46 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3593
diff changeset
  4990
	_cur_grffile->spritegroups = NULL;
20621831cd46 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3593
diff changeset
  4991
	_cur_grffile->spritegroups_count = 0;
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4992
}
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  4993
6473
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  4994
static void BuildCargoTranslationMap()
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  4995
{
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  4996
	memset(_cur_grffile->cargo_map, 0xFF, sizeof(_cur_grffile->cargo_map));
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  4997
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  4998
	for (CargoID c = 0; c < NUM_CARGO; c++) {
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  4999
		const CargoSpec *cs = GetCargo(c);
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5000
		if (!cs->IsValid()) continue;
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5001
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5002
		if (_cur_grffile->cargo_max == 0) {
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5003
			/* Default translation table, so just a straight mapping to bitnum */
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5004
			_cur_grffile->cargo_map[c] = cs->bitnum;
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5005
		} else {
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5006
			/* Check the translation table for this cargo's label */
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5007
			for (uint i = 0; i < _cur_grffile->cargo_max; i++) {
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5008
				if (cs->label == _cur_grffile->cargo_list[i]) {
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5009
					_cur_grffile->cargo_map[c] = i;
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5010
					break;
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5011
				}
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5012
			}
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5013
		}
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5014
	}
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5015
}
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5016
3628
bd4a6601e5a2 (svn r4527) - Feature [NewGRF]: Add support for specifying parameters to GRF files. Usage: "mygrf = 1". You can pass up to 128 parameters, each one seperated by a comma or a space-character. Big thanks to peter1138 for the inspiration and examples.
Darkvater
parents: 3620
diff changeset
  5017
static void InitNewGRFFile(const GRFConfig *config, int sprite_offset)
368
32aad6ad36e1 (svn r556) -newgrf: Some seemingly proper support for loading stages of grf files (octo & pasky).
darkvater
parents: 367
diff changeset
  5018
{
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  5019
	GRFFile *newfile = GetFileByFilename(config->filename);
490
83455cd1cc55 (svn r772) Whoops, I know. Do not consider pointer to be a boolean value. Sorry 'bout that, sirs.
pasky
parents: 489
diff changeset
  5020
	if (newfile != NULL) {
489
9c8e1806935e (svn r771) Do not give a file new {struct GRFFile} if it was already loaded once. Eliminates those double entries in the newgrf manager and also some possible memory leaks.
pasky
parents: 478
diff changeset
  5021
		/* We already loaded it once. */
9c8e1806935e (svn r771) Do not give a file new {struct GRFFile} if it was already loaded once. Eliminates those double entries in the newgrf manager and also some possible memory leaks.
pasky
parents: 478
diff changeset
  5022
		newfile->sprite_offset = sprite_offset;
9c8e1806935e (svn r771) Do not give a file new {struct GRFFile} if it was already loaded once. Eliminates those double entries in the newgrf manager and also some possible memory leaks.
pasky
parents: 478
diff changeset
  5023
		_cur_grffile = newfile;
9c8e1806935e (svn r771) Do not give a file new {struct GRFFile} if it was already loaded once. Eliminates those double entries in the newgrf manager and also some possible memory leaks.
pasky
parents: 478
diff changeset
  5024
		return;
9c8e1806935e (svn r771) Do not give a file new {struct GRFFile} if it was already loaded once. Eliminates those double entries in the newgrf manager and also some possible memory leaks.
pasky
parents: 478
diff changeset
  5025
	}
9c8e1806935e (svn r771) Do not give a file new {struct GRFFile} if it was already loaded once. Eliminates those double entries in the newgrf manager and also some possible memory leaks.
pasky
parents: 478
diff changeset
  5026
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  5027
	newfile = CallocT<GRFFile>(1);
366
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  5028
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  5029
	if (newfile == NULL) error ("Out of memory");
366
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  5030
7530
31257d744079 (svn r10298) -Fix [FS#903]: show the subdirectory below the default data directory in this filename in the newgrf list. The directory was removed in r9560 because then it used to full path instead of the path relative to the data directory, but since the inclusion of "search paths" that is not necessary anymore.
rubidium
parents: 7452
diff changeset
  5031
	newfile->filename = strdup(config->filename);
366
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  5032
	newfile->sprite_offset = sprite_offset;
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  5033
3628
bd4a6601e5a2 (svn r4527) - Feature [NewGRF]: Add support for specifying parameters to GRF files. Usage: "mygrf = 1". You can pass up to 128 parameters, each one seperated by a comma or a space-character. Big thanks to peter1138 for the inspiration and examples.
Darkvater
parents: 3620
diff changeset
  5034
	/* Copy the initial parameter list */
bd4a6601e5a2 (svn r4527) - Feature [NewGRF]: Add support for specifying parameters to GRF files. Usage: "mygrf = 1". You can pass up to 128 parameters, each one seperated by a comma or a space-character. Big thanks to peter1138 for the inspiration and examples.
Darkvater
parents: 3620
diff changeset
  5035
	assert(lengthof(newfile->param) == lengthof(config->param) && lengthof(config->param) == 0x80);
bd4a6601e5a2 (svn r4527) - Feature [NewGRF]: Add support for specifying parameters to GRF files. Usage: "mygrf = 1". You can pass up to 128 parameters, each one seperated by a comma or a space-character. Big thanks to peter1138 for the inspiration and examples.
Darkvater
parents: 3620
diff changeset
  5036
	newfile->param_end = config->num_params;
5681
7b237b4958d6 (svn r7636) -Cleanup: Remove unused window classes (sorry WC-mess) and use sizeof(array) instead
Darkvater
parents: 5664
diff changeset
  5037
	memcpy(newfile->param, config->param, sizeof(newfile->param));
3628
bd4a6601e5a2 (svn r4527) - Feature [NewGRF]: Add support for specifying parameters to GRF files. Usage: "mygrf = 1". You can pass up to 128 parameters, each one seperated by a comma or a space-character. Big thanks to peter1138 for the inspiration and examples.
Darkvater
parents: 3620
diff changeset
  5038
366
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  5039
	if (_first_grffile == NULL) {
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  5040
		_cur_grffile = newfile;
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  5041
		_first_grffile = newfile;
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  5042
	} else {
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  5043
		_cur_grffile->next = newfile;
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  5044
		_cur_grffile = newfile;
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  5045
	}
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  5046
}
9d2630b8b4de (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky
darkvater
parents: 363
diff changeset
  5047
5037
7d956200ee71 (svn r7079) -Codechange: Move an array to the only place it is used.
peter1138
parents: 5024
diff changeset
  5048
6471
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5049
/** List of what cargo labels are refittable for the given the vehicle-type.
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5050
 * Only currently active labels are applied. */
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5051
static const CargoLabel _default_refitmasks_rail[] = {
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5052
	'PASS', 'COAL', 'MAIL', 'LVST', 'GOOD', 'GRAI', 'WHEA', 'MAIZ', 'WOOD',
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5053
	'IORE', 'STEL', 'VALU', 'GOLD', 'DIAM', 'PAPR', 'FOOD', 'FRUT', 'CORE',
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5054
	'WATR', 'SUGR', 'TOYS', 'BATT', 'SWET', 'TOFF', 'COLA', 'CTCD', 'BUBL',
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5055
	'PLST', 'FZDR',
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5056
	0 };
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5057
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5058
static const CargoLabel _default_refitmasks_road[] = {
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5059
	0 };
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5060
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5061
static const CargoLabel _default_refitmasks_ships[] = {
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5062
	'COAL', 'MAIL', 'LVST', 'GOOD', 'GRAI', 'WHEA', 'MAIZ', 'WOOD', 'IORE',
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5063
	'STEL', 'VALU', 'GOLD', 'DIAM', 'PAPR', 'FOOD', 'FRUT', 'CORE', 'WATR',
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5064
	'RUBR', 'SUGR', 'TOYS', 'BATT', 'SWET', 'TOFF', 'COLA', 'CTCD', 'BUBL',
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5065
	'PLST', 'FZDR',
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5066
	0 };
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5067
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5068
static const CargoLabel _default_refitmasks_aircraft[] = {
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5069
	'PASS', 'MAIL', 'GOOD', 'VALU', 'GOLD', 'DIAM', 'FOOD', 'FRUT', 'SUGR',
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5070
	'TOYS', 'BATT', 'SWET', 'TOFF', 'COLA', 'CTCD', 'BUBL', 'PLST', 'FZDR',
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5071
	0 };
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5072
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5073
static const CargoLabel *_default_refitmasks[] = {
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5074
	_default_refitmasks_rail,
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5075
	_default_refitmasks_road,
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5076
	_default_refitmasks_ships,
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5077
	_default_refitmasks_aircraft,
5037
7d956200ee71 (svn r7079) -Codechange: Move an array to the only place it is used.
peter1138
parents: 5024
diff changeset
  5078
};
7d956200ee71 (svn r7079) -Codechange: Move an array to the only place it is used.
peter1138
parents: 5024
diff changeset
  5079
7d956200ee71 (svn r7079) -Codechange: Move an array to the only place it is used.
peter1138
parents: 5024
diff changeset
  5080
2611
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5081
/**
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5082
 * Precalculate refit masks from cargo classes for all vehicles.
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5083
 */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6560
diff changeset
  5084
static void CalculateRefitMasks()
2611
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5085
{
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  5086
	for (EngineID engine = 0; engine < TOTAL_NUM_ENGINES; engine++) {
2611
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5087
		uint32 mask = 0;
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5088
		uint32 not_mask = 0;
6610
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5089
		uint32 xor_mask = 0;
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5090
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5091
		if (_engine_info[engine].refit_mask != 0) {
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5092
			const GRFFile *file = GetEngineGRF(engine);
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5093
			if (file != NULL && file->cargo_max != 0) {
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5094
				/* Apply cargo translation table to the refit mask */
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5095
				uint num_cargo = min(32, file->cargo_max);
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5096
				for (uint i = 0; i < num_cargo; i++) {
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5097
					if (!HASBIT(_engine_info[engine].refit_mask, i)) continue;
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5098
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5099
					CargoID c = GetCargoIDByLabel(file->cargo_list[i]);
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5100
					if (c == CT_INVALID) continue;
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5101
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5102
					SETBIT(xor_mask, c);
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5103
				}
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5104
			} else {
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5105
				/* No cargo table, so use the cargo bitnum values */
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5106
				for (CargoID c = 0; c < NUM_CARGO; c++) {
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5107
					const CargoSpec *cs = GetCargo(c);
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5108
					if (!cs->IsValid()) continue;
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5109
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5110
					if (HASBIT(_engine_info[engine].refit_mask, cs->bitnum)) SETBIT(xor_mask, c);
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5111
				}
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5112
			}
ecaea43b2238 (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks
peter1138
parents: 6608
diff changeset
  5113
		}
2611
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5114
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5115
		if (cargo_allowed[engine] != 0) {
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  5116
			/* Build up the list of cargo types from the set cargo classes. */
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  5117
			for (CargoID i = 0; i < NUM_CARGO; i++) {
6439
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6433
diff changeset
  5118
				const CargoSpec *cs = GetCargo(i);
6474
24e7ceeb25f5 (svn r8891) -Codechange: Remove remains of global cargo scheme. All cargo mapping is now dealt with only in NewGRF code, on load where possible.
peter1138
parents: 6473
diff changeset
  5119
				if (cargo_allowed[engine]    & cs->classes) SETBIT(mask,     i);
24e7ceeb25f5 (svn r8891) -Codechange: Remove remains of global cargo scheme. All cargo mapping is now dealt with only in NewGRF code, on load where possible.
peter1138
parents: 6473
diff changeset
  5120
				if (cargo_disallowed[engine] & cs->classes) SETBIT(not_mask, i);
2611
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5121
			}
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5122
		} else {
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  5123
			/* Don't apply default refit mask to wagons or engines with no capacity */
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  5124
			if (xor_mask == 0 && (
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6574
diff changeset
  5125
						GetEngine(engine)->type != VEH_TRAIN || (
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  5126
							RailVehInfo(engine)->capacity != 0 &&
6119
b47985557d1e (svn r8455) -Codechange: Give a more meaningful name (railveh_type)to member flags of RailVehInfo, as well as changing the code to reflect the fact that it was not a flag but rather a one value only variable. Doing so, some evaluations have been simplified.
belugas
parents: 6106
diff changeset
  5127
							RailVehInfo(engine)->railveh_type != RAILVEH_WAGON
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  5128
						)
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  5129
					)) {
6471
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5130
				const CargoLabel *cl = _default_refitmasks[GetEngine(engine)->type];
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5131
				for (uint i = 0;; i++) {
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5132
					if (cl[i] == 0) break;
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5133
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5134
					CargoID cargo = GetCargoIDByLabel(cl[i]);
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5135
					if (cargo == CT_INVALID) continue;
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5136
6474
24e7ceeb25f5 (svn r8891) -Codechange: Remove remains of global cargo scheme. All cargo mapping is now dealt with only in NewGRF code, on load where possible.
peter1138
parents: 6473
diff changeset
  5137
					SETBIT(xor_mask, cargo);
6471
d0e79064c324 (svn r8888) -Codechange: Replace hardcoded default cargo bitmasks with a list of cargo labels.
peter1138
parents: 6469
diff changeset
  5138
				}
3033
e4f7c60a1742 (svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents: 3026
diff changeset
  5139
			}
2611
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5140
		}
6439
99a5807852b1 (svn r8849) -Codechange: Replace hardcoded global/climate cargo mapping tables with dynamically generated data. Change associated code to use new functions.
peter1138
parents: 6433
diff changeset
  5141
		_engine_info[engine].refit_mask = ((mask & ~not_mask) ^ xor_mask) & _cargo_mask;
6468
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5142
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5143
		/* Check if this engine's cargo type is valid. If not, set to the first refittable
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5144
		 * cargo type. Apparently cargo_type isn't a common property... */
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5145
		switch (GetEngine(engine)->type) {
7134
c5a90dd41166 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 7125
diff changeset
  5146
			default: NOT_REACHED();
c5a90dd41166 (svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents: 7125
diff changeset
  5147
			case VEH_AIRCRAFT: break;
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6574
diff changeset
  5148
			case VEH_TRAIN: {
6468
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5149
				RailVehicleInfo *rvi = &_rail_vehicle_info[engine];
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5150
				if (rvi->cargo_type == CT_INVALID) rvi->cargo_type = FindFirstRefittableCargo(engine);
6608
80bc656cc6fb (svn r9094) -Codechange: Don't set up refit masks for engine types not in the current climate, and exclude engine types if their cargo type is invalid and they have no refittable type.
peter1138
parents: 6607
diff changeset
  5151
				if (rvi->cargo_type == CT_INVALID) _engine_info[engine].climates = 0;
6468
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5152
				break;
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5153
			}
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6574
diff changeset
  5154
			case VEH_ROAD: {
6468
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5155
				RoadVehicleInfo *rvi = &_road_vehicle_info[engine - ROAD_ENGINES_INDEX];
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5156
				if (rvi->cargo_type == CT_INVALID) rvi->cargo_type = FindFirstRefittableCargo(engine);
6608
80bc656cc6fb (svn r9094) -Codechange: Don't set up refit masks for engine types not in the current climate, and exclude engine types if their cargo type is invalid and they have no refittable type.
peter1138
parents: 6607
diff changeset
  5157
				if (rvi->cargo_type == CT_INVALID) _engine_info[engine].climates = 0;
6468
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5158
				break;
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5159
			}
6585
7da94b26498a (svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents: 6574
diff changeset
  5160
			case VEH_SHIP: {
6468
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5161
				ShipVehicleInfo *svi = &_ship_vehicle_info[engine - SHIP_ENGINES_INDEX];
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5162
				if (svi->cargo_type == CT_INVALID) svi->cargo_type = FindFirstRefittableCargo(engine);
6608
80bc656cc6fb (svn r9094) -Codechange: Don't set up refit masks for engine types not in the current climate, and exclude engine types if their cargo type is invalid and they have no refittable type.
peter1138
parents: 6607
diff changeset
  5163
				if (svi->cargo_type == CT_INVALID) _engine_info[engine].climates = 0;
6468
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5164
				break;
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5165
			}
29a9bd549d0b (svn r8885) -Codechange: (NewGRF) If a default cargo type property is out of range then choose the cargo type from its refit list.
peter1138
parents: 6465
diff changeset
  5166
		}
2611
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5167
	}
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5168
}
363
cf3cee5f33b4 (svn r551) -newgrf: Preliminary support for TTDPatch flags checking (we just pretend that a bunch of things are on and the rest is off and that's it). Patch by octo, small cleanup by pasky.
darkvater
parents: 362
diff changeset
  5169
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5170
/** Add all new houses to the house array. House properties can be set at any
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5171
 * time in the GRF file, so we can only add a house spec to the house array
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5172
 * after the file has finished loading. We also need to check the dates, due to
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5173
 * the TTDPatch behaviour described below that we need to emulate. */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5174
static void FinaliseHouseArray()
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5175
{
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5176
	/* If there are no houses with start dates before 1930, then all houses
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5177
	 * with start dates of 1930 have them reset to 0. This is in order to be
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5178
	 * compatible with TTDPatch, where if no houses have start dates before
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5179
	 * 1930 and the date is before 1930, the game pretends that this is 1930.
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5180
	 * If there have been any houses defined with start dates before 1930 then
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5181
	 * the dates are left alone. */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5182
	bool reset_dates = true;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5183
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5184
	for (GRFFile *file = _first_grffile; file != NULL; file = file->next) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5185
		if (file->housespec == NULL) continue;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5186
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5187
		for (int i = 0; i < HOUSE_MAX; i++) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5188
			HouseSpec *hs = file->housespec[i];
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5189
			if (hs != NULL) {
7125
4ce0c7a12a3f (svn r9850) -Codechange: Introduction of the Override/Substitute manager. Currently only used for newhouses.
belugas
parents: 7119
diff changeset
  5190
				_house_mngr.SetEntitySpec(hs);
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5191
				if (hs->min_date < 1930) reset_dates = false;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5192
			}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5193
		}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5194
	}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5195
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5196
	if (reset_dates) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5197
		for (int i = NEW_HOUSE_OFFSET; i < HOUSE_MAX; i++) {
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5198
			HouseSpec *hs = GetHouseSpecs(i);
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5199
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5200
			if (hs->enabled && hs->min_date == 1930) hs->min_date = 0;
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5201
		}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5202
	}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5203
}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5204
7679
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5205
/** Add all new industries to the industry array. Industry properties can be set at any
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5206
 * time in the GRF file, so we can only add a industry spec to the industry array
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5207
 * after the file has finished loading. */
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5208
static void FinaliseIndustriesArray()
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5209
{
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5210
	for (GRFFile *file = _first_grffile; file != NULL; file = file->next) {
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5211
		if (file->industryspec != NULL) {
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5212
			for (int i = 0; i < NUM_INDUSTRYTYPES; i++) {
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5213
				IndustrySpec *indsp = file->industryspec[i];
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5214
7713
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5215
				if (indsp != NULL && indsp->enabled) {
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5216
					StringID strid;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5217
					/* process the conversion of text at the end, so to be sure everything will be fine
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5218
					 * and available.  Check if it does not return undefind marker, which is a very good sign of a
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5219
					 * substitute industry who has not changed the string been examined, thus using it as such */
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5220
					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->name);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5221
					if (strid != STR_UNDEFINED) indsp->name = strid;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5222
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5223
					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->closure_text);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5224
					if (strid != STR_UNDEFINED) indsp->closure_text = strid;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5225
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5226
					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->production_up_text);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5227
					if (strid != STR_UNDEFINED) indsp->production_up_text = strid;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5228
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5229
					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->production_down_text);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5230
					if (strid != STR_UNDEFINED) indsp->production_down_text = strid;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5231
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5232
					strid = GetGRFStringID(indsp->grf_prop.grffile->grfid, indsp->new_industry_text);
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5233
					if (strid != STR_UNDEFINED) indsp->new_industry_text = strid;
051fca48d12b (svn r10495) -Codechange: Add the Action 00 property handlers for Industries and Industry tiles
belugas
parents: 7679
diff changeset
  5234
7679
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5235
					_industry_mngr.SetEntitySpec(indsp);
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5236
					_loaded_newgrf_features.has_newindustries = true;
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5237
				}
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5238
			}
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5239
		}
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5240
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5241
		if (file->indtspec != NULL) {
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5242
			for (int i = 0; i < NUM_INDUSTRYTILES; i++) {
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5243
				IndustryTileSpec *indtsp = file->indtspec[i];
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5244
				if (indtsp != NULL) {
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5245
					_industile_mngr.SetEntitySpec(indtsp);
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5246
				}
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5247
			}
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5248
		}
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5249
	}
7729
21b3ddd80928 (svn r10514) -Codechange: add support for getting the nearest industry with a given type.
rubidium
parents: 7725
diff changeset
  5250
21b3ddd80928 (svn r10514) -Codechange: add support for getting the nearest industry with a given type.
rubidium
parents: 7725
diff changeset
  5251
	for (uint j = 0; j < NUM_INDUSTRYTYPES; j++) {
21b3ddd80928 (svn r10514) -Codechange: add support for getting the nearest industry with a given type.
rubidium
parents: 7725
diff changeset
  5252
		IndustrySpec *indsp = &_industry_specs[j];
21b3ddd80928 (svn r10514) -Codechange: add support for getting the nearest industry with a given type.
rubidium
parents: 7725
diff changeset
  5253
		if (indsp->enabled && indsp->grf_prop.grffile != NULL) {
21b3ddd80928 (svn r10514) -Codechange: add support for getting the nearest industry with a given type.
rubidium
parents: 7725
diff changeset
  5254
			for (uint i = 0; i < 3; i++) {
21b3ddd80928 (svn r10514) -Codechange: add support for getting the nearest industry with a given type.
rubidium
parents: 7725
diff changeset
  5255
				indsp->conflicting[i] = MapNewGRFIndustryType(indsp->conflicting[i], indsp->grf_prop.grffile->grfid);
21b3ddd80928 (svn r10514) -Codechange: add support for getting the nearest industry with a given type.
rubidium
parents: 7725
diff changeset
  5256
			}
21b3ddd80928 (svn r10514) -Codechange: add support for getting the nearest industry with a given type.
rubidium
parents: 7725
diff changeset
  5257
		}
21b3ddd80928 (svn r10514) -Codechange: add support for getting the nearest industry with a given type.
rubidium
parents: 7725
diff changeset
  5258
	}
7679
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5259
}
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5260
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5261
/** Each cargo string needs to be mapped from TTDPatch to OpenTTD string IDs.
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5262
 * This is done after loading so that strings from Action 4 will be mapped
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5263
 * properly. */
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5264
static void MapNewCargoStrings()
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5265
{
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5266
	for (CargoID c = 0; c < NUM_CARGO; c++) {
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5267
		CargoSpec *cs = &_cargo[c];
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5268
		/* Don't map if the cargo is unavailable or not from NewGRF */
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5269
		if (!cs->IsValid() || cs->grfid == 0) continue;
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5270
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5271
		cs->name         = MapGRFStringID(cs->grfid, cs->name);
7783
467bf38f954f (svn r10628) -Fix (r10606,FS#1055): Revert r10606 and fix the plural problem another way.
peter1138
parents: 7772
diff changeset
  5272
		cs->name_single  = MapGRFStringID(cs->grfid, cs->name_single);
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5273
		cs->units_volume = MapGRFStringID(cs->grfid, cs->units_volume);
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5274
		cs->quantifier   = MapGRFStringID(cs->grfid, cs->quantifier);
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5275
		cs->abbrev       = MapGRFStringID(cs->grfid, cs->abbrev);
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5276
	}
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5277
}
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5278
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5279
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  5280
/* Here we perform initial decoding of some special sprites (as are they
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  5281
 * described at http://www.ttdpatch.net/src/newgrf.txt, but this is only a very
368
32aad6ad36e1 (svn r556) -newgrf: Some seemingly proper support for loading stages of grf files (octo & pasky).
darkvater
parents: 367
diff changeset
  5282
 * partial implementation yet). */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  5283
/* XXX: We consider GRF files trusted. It would be trivial to exploit OTTD by
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  5284
 * a crafted invalid GRF file. We should tell that to the user somehow, or
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  5285
 * better make this more robust in the future. */
5008
f95f0bd55c34 (svn r7027) - Codechange: Replace NewGRF loading stage masks with separate function lists. This will allow us to call different handlers depending on the current stage. Also enum-ize the stage.
peter1138
parents: 4993
diff changeset
  5286
static void DecodeSpecialSprite(uint num, GrfLoadingStage stage)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  5287
{
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  5288
	/* XXX: There is a difference between staged loading in TTDPatch and
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  5289
	 * here.  In TTDPatch, for some reason actions 1 and 2 are carried out
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  5290
	 * during stage 1, whilst action 3 is carried out during stage 2 (to
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  5291
	 * "resolve" cargo IDs... wtf). This is a little problem, because cargo
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  5292
	 * IDs are valid only within a given set (action 1) block, and may be
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  5293
	 * overwritten after action 3 associates them. But overwriting happens
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  5294
	 * in an earlier stage than associating, so...  We just process actions
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  5295
	 * 1 and 2 in stage 2 now, let's hope that won't get us into problems.
389
2d394eeba5e5 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
celestar
parents: 381
diff changeset
  5296
	 * --pasky */
3561
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  5297
	/* We need a pre-stage to set up GOTO labels of Action 0x10 because the grf
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  5298
	 * is not in memory and scanning the file every time would be too expensive.
29c95ab685c0 (svn r4439) - NewGRF: Add support for Action 0x10. This also required an extra pre-stage (before initialize and activation) to scan the GRF file for GOTO labels. Big thanks for peter1138 for the guidance and answers, as well as parts of the code.
Darkvater
parents: 3557
diff changeset
  5299
	 * In other stages we skip action 0x10 since it's already dealt with. */
5008
f95f0bd55c34 (svn r7027) - Codechange: Replace NewGRF loading stage masks with separate function lists. This will allow us to call different handlers depending on the current stage. Also enum-ize the stage.
peter1138
parents: 4993
diff changeset
  5300
	static const SpecialSpriteHandler handlers[][GLS_END] = {
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5301
		/* 0x00 */ { NULL,     SafeChangeInfo, NULL,       InitChangeInfo, ReserveChangeInfo, FeatureChangeInfo, },
7072
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  5302
		/* 0x01 */ { SkipAct1, SkipAct1,  SkipAct1,        SkipAct1,       SkipAct1,          NewSpriteSet, },
973b998c5cfe (svn r9790) -Codechange: [NewGRF] Skip action 1 sprites in all stages except activation. This also cleans up some special-case handling of the sprites. Actions 1 and 2 are now not considered unsafe, as an Action 3 (which is unsafe) is required for them.
peter1138
parents: 7066
diff changeset
  5303
		/* 0x02 */ { NULL,     NULL,      NULL,            NULL,           NULL,              NewSpriteGroup, },
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5304
		/* 0x03 */ { NULL,     GRFUnsafe, NULL,            NULL,           NULL,              FeatureMapSpriteGroup, },
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5305
		/* 0x04 */ { NULL,     NULL,      NULL,            NULL,           NULL,              FeatureNewName, },
7025
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  5306
		/* 0x05 */ { SkipAct5, SkipAct5,  SkipAct5,        SkipAct5,       SkipAct5,          GraphicsNew, },
6699
ff3ea89c64e4 (svn r9436) -Fix (r9411): don't deactivate GRF in an action 7/9 during reservation (and loading of cargo data), and action 6 should be run also
peter1138
parents: 6691
diff changeset
  5307
		/* 0x06 */ { NULL,     NULL,      NULL,            CfgApply,       CfgApply,          CfgApply, },
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5308
		/* 0x07 */ { NULL,     NULL,      NULL,            NULL,           SkipIf,            SkipIf, },
7302
7aa974539f27 (svn r10045) -Codechange: Process Action 8 during GLS_RESERVATION to allow Action 7/Action 9s to work properly
peter1138
parents: 7301
diff changeset
  5309
		/* 0x08 */ { ScanInfo, NULL,      NULL,            GRFInfo,        GRFInfo,           GRFInfo, },
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5310
		/* 0x09 */ { NULL,     NULL,      NULL,            SkipIf,         SkipIf,            SkipIf, },
7025
8504c5cfa1e5 (svn r9717) -Codechange: (NewGRF) Skip Action 5 & A sprites in all loading stages except activation.
peter1138
parents: 7011
diff changeset
  5311
		/* 0x0A */ { SkipActA, SkipActA,  SkipActA,        SkipActA,       SkipActA,          SpriteReplace, },
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5312
		/* 0x0B */ { NULL,     NULL,      NULL,            GRFLoadError,   GRFLoadError,      GRFLoadError, },
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5313
		/* 0x0C */ { NULL,     NULL,      NULL,            GRFComment,     NULL,              GRFComment, },
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5314
		/* 0x0D */ { NULL,     SafeParamSet, NULL,         ParamSet,       ParamSet,          ParamSet, },
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5315
		/* 0x0E */ { NULL,     SafeGRFInhibit, NULL,       GRFInhibit,     GRFInhibit,        GRFInhibit, },
7452
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  5316
		/* 0x0F */ { NULL,     GRFUnsafe, NULL,            FeatureTownName, NULL,             NULL, },
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5317
		/* 0x10 */ { NULL,     NULL,      DefineGotoLabel, NULL,           NULL,              NULL, },
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5318
		/* 0x11 */ { NULL,     GRFUnsafe, NULL,            NULL,           NULL,              GRFSound, },
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5319
		/* 0x12 */ { NULL,     NULL,      NULL,            NULL,           NULL,              LoadFontGlyph, },
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5320
		/* 0x13 */ { NULL,     NULL,      NULL,            NULL,           NULL,              TranslateGRFStrings, },
2342
c19fb4f2df30 (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
  5321
	};
368
32aad6ad36e1 (svn r556) -newgrf: Some seemingly proper support for loading stages of grf files (octo & pasky).
darkvater
parents: 367
diff changeset
  5322
3895
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5323
	byte* buf;
368
32aad6ad36e1 (svn r556) -newgrf: Some seemingly proper support for loading stages of grf files (octo & pasky).
darkvater
parents: 367
diff changeset
  5324
3895
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5325
	if (_preload_sprite == NULL) {
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5326
		/* No preloaded sprite to work with; allocate and read the
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5327
		 * pseudo sprite content. */
5860
7fdc9b423ba1 (svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents: 5844
diff changeset
  5328
		buf = MallocT<byte>(num);
3895
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5329
		if (buf == NULL) error("DecodeSpecialSprite: Could not allocate memory");
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5330
		FioReadBlock(buf, num);
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5331
	} else {
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5332
		/* Use the preloaded sprite data. */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5333
		buf = _preload_sprite;
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5334
		_preload_sprite = NULL;
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  5335
		grfmsg(7, "DecodeSpecialSprite: Using preloaded pseudo sprite data");
3895
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5336
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5337
		/* Skip the real (original) content of this action. */
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5338
		FioSeekTo(num, SEEK_CUR);
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5339
	}
a67d4451a1df (svn r4965) - NewGRF: add support for action 0x06 (modify sprite data) for pseudo sprites
peter1138
parents: 3879
diff changeset
  5340
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  5341
	byte action = buf[0];
2342
c19fb4f2df30 (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
  5342
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  5343
	if (action == 0xFF) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  5344
		grfmsg(7, "DecodeSpecialSprite: Handling data block in stage %d", stage);
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  5345
		GRFDataBlock(buf, num);
4818
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  5346
	} else if (action == 0xFE) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  5347
		grfmsg(7, "DecodeSpecialSprite: andling import block in stage %d", stage);
4818
1625f49f708d (svn r6742) - Newsounds: Add support for importing sounds from previously loaded GRF files.
peter1138
parents: 4817
diff changeset
  5348
		GRFImportBlock(buf, num);
4656
acffecd6f484 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4625
diff changeset
  5349
	} else if (action >= lengthof(handlers)) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  5350
		grfmsg(7, "DecodeSpecialSprite: Skipping unknown action 0x%02X", action);
5008
f95f0bd55c34 (svn r7027) - Codechange: Replace NewGRF loading stage masks with separate function lists. This will allow us to call different handlers depending on the current stage. Also enum-ize the stage.
peter1138
parents: 4993
diff changeset
  5351
	} else if (handlers[action][stage] == NULL) {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  5352
		grfmsg(7, "DecodeSpecialSprite: Skipping action 0x%02X in stage %d", action, stage);
2645
964bd8fe3ce2 (svn r3187) Simplify overly complicated ifs, especially if (foo) return false; else return true; is confusing
tron
parents: 2628
diff changeset
  5353
	} else {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  5354
		grfmsg(7, "DecodeSpecialSprite: Handling action 0x%02X in stage %d", action, stage);
5008
f95f0bd55c34 (svn r7027) - Codechange: Replace NewGRF loading stage masks with separate function lists. This will allow us to call different handlers depending on the current stage. Also enum-ize the stage.
peter1138
parents: 4993
diff changeset
  5355
		handlers[action][stage](buf, num);
2342
c19fb4f2df30 (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
  5356
	}
c19fb4f2df30 (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
  5357
	free(buf);
c19fb4f2df30 (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
  5358
}
c19fb4f2df30 (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
  5359
c19fb4f2df30 (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
  5360
5228
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
  5361
void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage)
2342
c19fb4f2df30 (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
  5362
{
7530
31257d744079 (svn r10298) -Fix [FS#903]: show the subdirectory below the default data directory in this filename in the newgrf list. The directory was removed in r9560 because then it used to full path instead of the path relative to the data directory, but since the inclusion of "search paths" that is not necessary anymore.
rubidium
parents: 7452
diff changeset
  5363
	const char *filename = config->filename;
2342
c19fb4f2df30 (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
  5364
	uint16 num;
c19fb4f2df30 (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
  5365
c19fb4f2df30 (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
  5366
	/* A .grf file is activated only if it was active when the game was
c19fb4f2df30 (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
  5367
	 * started.  If a game is loaded, only its active .grfs will be
c19fb4f2df30 (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
  5368
	 * reactivated, unless "loadallgraphics on" is used.  A .grf file is
c19fb4f2df30 (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
  5369
	 * considered active if its action 8 has been processed, i.e. its
c19fb4f2df30 (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
  5370
	 * action 8 hasn't been skipped using an action 7.
c19fb4f2df30 (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
  5371
	 *
c19fb4f2df30 (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
  5372
	 * During activation, only actions 0, 1, 2, 3, 4, 5, 7, 8, 9, 0A and 0B are
c19fb4f2df30 (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
  5373
	 * carried out.  All others are ignored, because they only need to be
c19fb4f2df30 (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
  5374
	 * processed once at initialization.  */
5329
2b117d8652f0 (svn r7490) -Feature: Load a list of NewGRFs from the config (in the [newgrf-static] section) that should always be loaded. These will also be active during the intro screen, and in multiplayer games. Only "network-safe" NewGRFs are permitted, such as fonts and sprite replacement sets.
peter1138
parents: 5324
diff changeset
  5375
	if (stage != GLS_FILESCAN && stage != GLS_SAFETYSCAN && stage != GLS_LABELSCAN) {
2342
c19fb4f2df30 (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
  5376
		_cur_grffile = GetFileByFilename(filename);
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5567
diff changeset
  5377
		if (_cur_grffile == NULL) error("File '%s' lost in cache.\n", filename);
7302
7aa974539f27 (svn r10045) -Codechange: Process Action 8 during GLS_RESERVATION to allow Action 7/Action 9s to work properly
peter1138
parents: 7301
diff changeset
  5378
		if (stage == GLS_RESERVE && config->status != GCS_INITIALISED) return;
7316
7c38e04b95c5 (svn r10059) -Fix (r10045): Pretend GRF is still in initialisation state when leaving reservation stage. This fixes action 7/9 tests for grfs that will be active.
peter1138
parents: 7309
diff changeset
  5379
		if (stage == GLS_ACTIVATION && config->status != GCS_INITIALISED) return;
2342
c19fb4f2df30 (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
  5380
	}
c19fb4f2df30 (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
  5381
c19fb4f2df30 (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
  5382
	FioOpenFile(file_index, filename);
c19fb4f2df30 (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
  5383
	_file_index = file_index; // XXX
c19fb4f2df30 (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
  5384
5228
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
  5385
	_cur_grfconfig = config;
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
  5386
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  5387
	DEBUG(grf, 2, "LoadNewGRFFile: Reading NewGRF-file '%s'", filename);
2342
c19fb4f2df30 (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
  5388
c19fb4f2df30 (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
  5389
	/* Skip the first sprite; we don't care about how many sprites this
c19fb4f2df30 (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
  5390
	 * does contain; newest TTDPatches and George's longvehicles don't
c19fb4f2df30 (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
  5391
	 * neither, apparently. */
c19fb4f2df30 (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
  5392
	if (FioReadWord() == 4 && FioReadByte() == 0xFF) {
c19fb4f2df30 (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
  5393
		FioReadDword();
c19fb4f2df30 (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
  5394
	} else {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  5395
		DEBUG(grf, 7, "LoadNewGRFFile: Custom .grf has invalid format");
5228
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
  5396
		return;
2342
c19fb4f2df30 (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
  5397
	}
c19fb4f2df30 (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
  5398
c19fb4f2df30 (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
  5399
	_skip_sprites = 0; // XXX
3557
5d12a78ce141 (svn r4431) - NewGRF: rename nfo_line to _nfo_line, to avoid confusing Darkvater ;)
peter1138
parents: 3555
diff changeset
  5400
	_nfo_line = 0;
2342
c19fb4f2df30 (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
  5401
c19fb4f2df30 (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
  5402
	while ((num = FioReadWord()) != 0) {
c19fb4f2df30 (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
  5403
		byte type = FioReadByte();
3557
5d12a78ce141 (svn r4431) - NewGRF: rename nfo_line to _nfo_line, to avoid confusing Darkvater ;)
peter1138
parents: 3555
diff changeset
  5404
		_nfo_line++;
2342
c19fb4f2df30 (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
  5405
c19fb4f2df30 (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
  5406
		if (type == 0xFF) {
c19fb4f2df30 (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
  5407
			if (_skip_sprites == 0) {
2958
3f8946daf55f (svn r3520) Remove unused parameters from some functions
tron
parents: 2935
diff changeset
  5408
				DecodeSpecialSprite(num, stage);
5011
23f0b424a1be (svn r7031) -Codechange: Use _skip_sprites to skip the rest of the NewGRF when disabled by GRM, and add a shortcut so that the rest of the file isn't scanned.
peter1138
parents: 5008
diff changeset
  5409
23f0b424a1be (svn r7031) -Codechange: Use _skip_sprites to skip the rest of the NewGRF when disabled by GRM, and add a shortcut so that the rest of the file isn't scanned.
peter1138
parents: 5008
diff changeset
  5410
				/* Stop all processing if we are to skip the remaining sprites */
23f0b424a1be (svn r7031) -Codechange: Use _skip_sprites to skip the rest of the NewGRF when disabled by GRM, and add a shortcut so that the rest of the file isn't scanned.
peter1138
parents: 5008
diff changeset
  5411
				if (_skip_sprites == -1) break;
23f0b424a1be (svn r7031) -Codechange: Use _skip_sprites to skip the rest of the NewGRF when disabled by GRM, and add a shortcut so that the rest of the file isn't scanned.
peter1138
parents: 5008
diff changeset
  5412
2342
c19fb4f2df30 (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
  5413
				continue;
c19fb4f2df30 (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
  5414
			} else {
c19fb4f2df30 (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
  5415
				FioSkipBytes(num);
1611
bf352a87ef51 (svn r2115) Spring cleaning, no functional changes
tron
parents: 1607
diff changeset
  5416
			}
368
32aad6ad36e1 (svn r556) -newgrf: Some seemingly proper support for loading stages of grf files (octo & pasky).
darkvater
parents: 367
diff changeset
  5417
		} else {
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  5418
			if (_skip_sprites == 0) grfmsg(7, "LoadNewGRFFile: Skipping unexpected sprite");
2342
c19fb4f2df30 (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
  5419
c19fb4f2df30 (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
  5420
			FioSkipBytes(7);
c19fb4f2df30 (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
  5421
			num -= 8;
c19fb4f2df30 (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
  5422
c19fb4f2df30 (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
  5423
			if (type & 2) {
c19fb4f2df30 (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
  5424
				FioSkipBytes(num);
c19fb4f2df30 (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
  5425
			} else {
c19fb4f2df30 (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
  5426
				while (num > 0) {
c19fb4f2df30 (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
  5427
					int8 i = FioReadByte();
c19fb4f2df30 (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
  5428
					if (i >= 0) {
c19fb4f2df30 (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
  5429
						num -= i;
c19fb4f2df30 (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
  5430
						FioSkipBytes(i);
c19fb4f2df30 (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
  5431
					} else {
c19fb4f2df30 (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
  5432
						i = -(i >> 3);
c19fb4f2df30 (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
  5433
						num -= i;
c19fb4f2df30 (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
  5434
						FioReadByte();
c19fb4f2df30 (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
  5435
					}
c19fb4f2df30 (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
  5436
				}
c19fb4f2df30 (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
  5437
			}
368
32aad6ad36e1 (svn r556) -newgrf: Some seemingly proper support for loading stages of grf files (octo & pasky).
darkvater
parents: 367
diff changeset
  5438
		}
2342
c19fb4f2df30 (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
  5439
c19fb4f2df30 (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
  5440
		if (_skip_sprites > 0) _skip_sprites--;
c19fb4f2df30 (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
  5441
	}
c19fb4f2df30 (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
  5442
}
c19fb4f2df30 (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
  5443
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6560
diff changeset
  5444
void InitDepotWindowBlockSizes();
2342
c19fb4f2df30 (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
  5445
7452
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  5446
extern void SortTownGeneratorNames();
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  5447
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5448
static void AfterLoadGRFs()
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5449
{
7182
644a1d06f2be (svn r9918) -Fix: the available roadtypes/railtypes were not updated on GRF updates.
rubidium
parents: 7180
diff changeset
  5450
	/* Update the bitmasks for the vehicle lists */
644a1d06f2be (svn r9918) -Fix: the available roadtypes/railtypes were not updated on GRF updates.
rubidium
parents: 7180
diff changeset
  5451
	Player *p;
644a1d06f2be (svn r9918) -Fix: the available roadtypes/railtypes were not updated on GRF updates.
rubidium
parents: 7180
diff changeset
  5452
	FOR_ALL_PLAYERS(p) {
644a1d06f2be (svn r9918) -Fix: the available roadtypes/railtypes were not updated on GRF updates.
rubidium
parents: 7180
diff changeset
  5453
		p->avail_railtypes = GetPlayerRailtypes(p->index);
644a1d06f2be (svn r9918) -Fix: the available roadtypes/railtypes were not updated on GRF updates.
rubidium
parents: 7180
diff changeset
  5454
		p->avail_roadtypes = GetPlayerRoadtypes(p->index);
644a1d06f2be (svn r9918) -Fix: the available roadtypes/railtypes were not updated on GRF updates.
rubidium
parents: 7180
diff changeset
  5455
	}
644a1d06f2be (svn r9918) -Fix: the available roadtypes/railtypes were not updated on GRF updates.
rubidium
parents: 7180
diff changeset
  5456
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5457
	/* Pre-calculate all refit masks after loading GRF files. */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5458
	CalculateRefitMasks();
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5459
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5460
	/* Set the block size in the depot windows based on vehicle sprite sizes */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5461
	InitDepotWindowBlockSizes();
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5462
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5463
	/* Add all new houses to the house array. */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5464
	FinaliseHouseArray();
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5465
7679
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5466
	/* Add all new industries to the industry array. */
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5467
	FinaliseIndustriesArray();
c3c44a572f6e (svn r10457) -Codechange: Load the newly read definitions of Industries and Industry tiles.
belugas
parents: 7678
diff changeset
  5468
7029
209e4b2e1180 (svn r9721) -Codechange: -Codechange: Cleanup of industry_cmd (Step-12). Dynamically build the legends (name and color) for industries in the smallmap_gui.
belugas
parents: 7025
diff changeset
  5469
	/* Create dynamic list of industry legends for smallmap_gui.cpp */
209e4b2e1180 (svn r9721) -Codechange: -Codechange: Cleanup of industry_cmd (Step-12). Dynamically build the legends (name and color) for industries in the smallmap_gui.
belugas
parents: 7025
diff changeset
  5470
	BuildIndustriesLegend();
209e4b2e1180 (svn r9721) -Codechange: -Codechange: Cleanup of industry_cmd (Step-12). Dynamically build the legends (name and color) for industries in the smallmap_gui.
belugas
parents: 7025
diff changeset
  5471
6685
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5472
	/* Map cargo strings. This is a separate step because cargos are
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5473
	 * loaded before strings... */
410bba0abb67 (svn r9411) -Codechange: Add support for loading of newcargo data.
peter1138
parents: 6683
diff changeset
  5474
	MapNewCargoStrings();
7452
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  5475
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  5476
	/* Update the townname generators list */
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  5477
	SortTownGeneratorNames();
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5478
}
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5479
2342
c19fb4f2df30 (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
  5480
void LoadNewGRF(uint load_index, uint file_index)
c19fb4f2df30 (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
  5481
{
2930
a3bfaa5a9222 (svn r3486) - NewGRF fix: Always reinitialize the ttdpatch flags as patch settings may have changed.
peter1138
parents: 2895
diff changeset
  5482
	InitializeGRFSpecial();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  5483
2463
de2605ed3758 (svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents: 2458
diff changeset
  5484
	ResetNewGRFData();
de2605ed3758 (svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents: 2458
diff changeset
  5485
2342
c19fb4f2df30 (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
  5486
	/* Load newgrf sprites
c19fb4f2df30 (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
  5487
	 * in each loading stage, (try to) open each file specified in the config
c19fb4f2df30 (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
  5488
	 * and load information from it. */
8156
1ad36ba703b3 (svn r11191) -Fix [FS#1227]: GLS_ACTIVATION stage must be done immediatly after GLS_RESERVE stage, before the GLS_RESERVE stage for the next newgrf.
glx
parents: 8129
diff changeset
  5489
	for (GrfLoadingStage stage = GLS_LABELSCAN; stage < GLS_ACTIVATION; stage++) {
2400
0b51bc385750 (svn r2926) -Fix: Use the same file slots in both initialisation stages when loading a patch grf
tron
parents: 2346
diff changeset
  5490
		uint slot = file_index;
2342
c19fb4f2df30 (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
  5491
c19fb4f2df30 (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
  5492
		_cur_stage = stage;
c19fb4f2df30 (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
  5493
		_cur_spriteid = load_index;
6607
b4f6595855c4 (svn r9093) -Codechange: variable scope / type
peter1138
parents: 6606
diff changeset
  5494
		for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
6555
c27c9d5b459f (svn r9031) -Codechange: Introduce grfconfig->status, and use it for states that are
maedhros
parents: 6519
diff changeset
  5495
			if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) continue;
7452
f6fd23727af0 (svn r10211) -Feature: [NewGRF] Add support for action 0F
glx
parents: 7423
diff changeset
  5496
			if (stage > GLS_INIT && HASBIT(c->flags, GCF_INIT_ONLY)) continue;
5228
c4a780348f66 (svn r7348) -Feature: Initial support for saving NewGRF settings with savegames. Back up your savegames...
peter1138
parents: 5225
diff changeset
  5497
6674
64f4781b4653 (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6669
diff changeset
  5498
			/* @todo usererror() */
7530
31257d744079 (svn r10298) -Fix [FS#903]: show the subdirectory below the default data directory in this filename in the newgrf list. The directory was removed in r9560 because then it used to full path instead of the path relative to the data directory, but since the inclusion of "search paths" that is not necessary anymore.
rubidium
parents: 7452
diff changeset
  5499
			if (!FioCheckFileExists(c->filename)) error("NewGRF file is missing '%s'", c->filename);
3628
bd4a6601e5a2 (svn r4527) - Feature [NewGRF]: Add support for specifying parameters to GRF files. Usage: "mygrf = 1". You can pass up to 128 parameters, each one seperated by a comma or a space-character. Big thanks to peter1138 for the inspiration and examples.
Darkvater
parents: 3620
diff changeset
  5500
5008
f95f0bd55c34 (svn r7027) - Codechange: Replace NewGRF loading stage masks with separate function lists. This will allow us to call different handlers depending on the current stage. Also enum-ize the stage.
peter1138
parents: 4993
diff changeset
  5501
			if (stage == GLS_LABELSCAN) InitNewGRFFile(c, _cur_spriteid);
8161
1e10c2d0811c (svn r11196) -Fix (r11191): _cur_stage was incorrect for GLS_ACTIVATION stage
glx
parents: 8160
diff changeset
  5502
			LoadNewGRFFile(c, slot, stage);
7316
7c38e04b95c5 (svn r10059) -Fix (r10045): Pretend GRF is still in initialisation state when leaving reservation stage. This fixes action 7/9 tests for grfs that will be active.
peter1138
parents: 7309
diff changeset
  5503
			if (stage == GLS_RESERVE) {
7c38e04b95c5 (svn r10059) -Fix (r10045): Pretend GRF is still in initialisation state when leaving reservation stage. This fixes action 7/9 tests for grfs that will be active.
peter1138
parents: 7309
diff changeset
  5504
				if (c->status == GCS_ACTIVATED) c->status = GCS_INITIALISED;
8161
1e10c2d0811c (svn r11196) -Fix (r11191): _cur_stage was incorrect for GLS_ACTIVATION stage
glx
parents: 8160
diff changeset
  5505
				_cur_stage = GLS_ACTIVATION;
8156
1ad36ba703b3 (svn r11191) -Fix [FS#1227]: GLS_ACTIVATION stage must be done immediatly after GLS_RESERVE stage, before the GLS_RESERVE stage for the next newgrf.
glx
parents: 8129
diff changeset
  5506
				LoadNewGRFFile(c, slot++, GLS_ACTIVATION);
8161
1e10c2d0811c (svn r11196) -Fix (r11191): _cur_stage was incorrect for GLS_ACTIVATION stage
glx
parents: 8160
diff changeset
  5507
				_cur_stage = stage;
5727
0fd7e97094e2 (svn r7760) -Codechange: Debug messages for newgrf showed the starting sprite, not the current sprite index. Also only output the debug message during activation, when sprites are loaded.
peter1138
parents: 5726
diff changeset
  5508
				ClearTemporaryNewGRFData();
6473
03480a0f016e (svn r8890) -Codechange: (NewGRF) add cargo translation support to engine var 47
peter1138
parents: 6471
diff changeset
  5509
				BuildCargoTranslationMap();
6973
100d41c32546 (svn r9653) -Codechange: Indicate the proper function names in the GRF messages
belugas
parents: 6966
diff changeset
  5510
				DEBUG(sprite, 2, "LoadNewGRF: Currently %i sprites are loaded", _cur_spriteid);
8161
1e10c2d0811c (svn r11196) -Fix (r11191): _cur_stage was incorrect for GLS_ACTIVATION stage
glx
parents: 8160
diff changeset
  5511
			} else {
1e10c2d0811c (svn r11196) -Fix (r11191): _cur_stage was incorrect for GLS_ACTIVATION stage
glx
parents: 8160
diff changeset
  5512
				slot++;
5727
0fd7e97094e2 (svn r7760) -Codechange: Debug messages for newgrf showed the starting sprite, not the current sprite index. Also only output the debug message during activation, when sprites are loaded.
peter1138
parents: 5726
diff changeset
  5513
			}
2342
c19fb4f2df30 (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
  5514
		}
c19fb4f2df30 (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
  5515
	}
2611
65b5313bc525 (svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents: 2582
diff changeset
  5516
6658
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5517
	/* Call any functions that should be run after GRFs have been loaded. */
59048224be55 (svn r9315) -Merge: The newhouses branch. With this merge comes almost complete support for
maedhros
parents: 6614
diff changeset
  5518
	AfterLoadGRFs();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  5519
}
7037
3cd1bd7a6edb (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros
parents: 7029
diff changeset
  5520
3cd1bd7a6edb (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros
parents: 7029
diff changeset
  5521
bool HasGrfMiscBit(GrfMiscBit bit)
3cd1bd7a6edb (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros
parents: 7029
diff changeset
  5522
{
3cd1bd7a6edb (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros
parents: 7029
diff changeset
  5523
	return HASBIT(_misc_grf_features, bit);
3cd1bd7a6edb (svn r9730) -Feature: [NewGRF] Add support for miscellaneous grf feature bit 1 - paved roads on desert tiles.
maedhros
parents: 7029
diff changeset
  5524
}