truebrain
|
98103121d4
|
(svn r23355) -Codechange: rename all AI* to Script* (Rubidium)
|
13 years ago |
truebrain
|
af1b3cc070
|
(svn r23355) -Codechange: rename all AI* to Script* (Rubidium)
|
13 years ago |
frosch
|
0fbad47371
|
(svn r23176) -Codechange: Deduplicate code between Engine::DetermineCapacity() and Engine::GetDisplayDefaultCapacity().
|
13 years ago |
frosch
|
cdb8445a47
|
(svn r23176) -Codechange: Deduplicate code between Engine::DetermineCapacity() and Engine::GetDisplayDefaultCapacity().
|
13 years ago |
frosch
|
88b2e687c2
|
(svn r23175) -Codechange: Refactor Engine::DetermineCapacity().
|
13 years ago |
frosch
|
52bcb026cc
|
(svn r23175) -Codechange: Refactor Engine::DetermineCapacity().
|
13 years ago |
frosch
|
50b480b959
|
(svn r23174) -Codechange: Deduplicate code between GetEngineProperty() and GetVehicleProperty().
|
13 years ago |
frosch
|
80e5c79bd6
|
(svn r23174) -Codechange: Deduplicate code between GetEngineProperty() and GetVehicleProperty().
|
13 years ago |
frosch
|
026317bb44
|
(svn r23173) -Codechange: Rename GetVehicleCapacity() to Engine::DetermineCapacity().
|
13 years ago |
frosch
|
3178814a00
|
(svn r23173) -Codechange: Rename GetVehicleCapacity() to Engine::DetermineCapacity().
|
13 years ago |
yexo
|
e98be8ed24
|
(svn r23083) -Fix: run StartupEngines() if NewGRFs changed during loading a savegame, just like it's running when NewGRFs are changed during a game
|
13 years ago |
yexo
|
091d31b84b
|
(svn r23083) -Fix: run StartupEngines() if NewGRFs changed during loading a savegame, just like it's running when NewGRFs are changed during a game
|
13 years ago |
frosch
|
acc3c75951
|
(svn r23075) -Codechange: Add GetGRF() and GetGRFID() methods to Engine and Vehicle to simplify code.
|
13 years ago |
frosch
|
ad38f27242
|
(svn r23075) -Codechange: Add GetGRF() and GetGRFID() methods to Engine and Vehicle to simplify code.
|
13 years ago |
frosch
|
b78a459613
|
(svn r22977) -Codechange: Rename SetCachedEngineCounts() to GroupStatistics::UpdateAfterLoad().
|
13 years ago |
frosch
|
4961cd06a9
|
(svn r22977) -Codechange: Rename SetCachedEngineCounts() to GroupStatistics::UpdateAfterLoad().
|
13 years ago |
frosch
|
b6766c2ed5
|
(svn r22976) -Codechange: Split group statistics into separate struct.
|
13 years ago |
frosch
|
c531453320
|
(svn r22976) -Codechange: Split group statistics into separate struct.
|
13 years ago |
frosch
|
7133887ed6
|
(svn r22975) -Codechange: Do not store Group::num_vehicle in the savegame, but compute it like num_engines on load.
|
13 years ago |
frosch
|
7d1755403b
|
(svn r22975) -Codechange: Do not store Group::num_vehicle in the savegame, but compute it like num_engines on load.
|
13 years ago |
michi_cc
|
08b7981f37
|
(svn r22713) -Feature: [NewGRF] Per vehicle custom cargo ageing period.
|
13 years ago |
michi_cc
|
d25840978c
|
(svn r22713) -Feature: [NewGRF] Per vehicle custom cargo ageing period.
|
13 years ago |
frosch
|
5e0bf4ada8
|
(svn r22690) -Fix: [NewGRF] Aircrafts defined with IDs above the default aircrafts always defaulted to passenger cargo.
|
13 years ago |
frosch
|
41348b8fe9
|
(svn r22690) -Fix: [NewGRF] Aircrafts defined with IDs above the default aircrafts always defaulted to passenger cargo.
|
13 years ago |
rubidium
|
fb5ecb9499
|
(svn r22411) -Document: another bunch of bits
|
14 years ago |
rubidium
|
9fc2798baf
|
(svn r22411) -Document: another bunch of bits
|
14 years ago |
frosch
|
d12c2dfa24
|
(svn r22250) -Cleanup (r16378): Engines poolitems do not need a flag for validness anymore. The pool knows that on its own.
|
14 years ago |
frosch
|
e1b7474b99
|
(svn r22250) -Cleanup (r16378): Engines poolitems do not need a flag for validness anymore. The pool knows that on its own.
|
14 years ago |
alberth
|
bb4d832146
|
(svn r22239) -Doc: Further engine doxyment additions.
|
14 years ago |
alberth
|
46d3b48fb3
|
(svn r22239) -Doc: Further engine doxyment additions.
|
14 years ago |
smatz
|
887a7724dc
|
(svn r22025) -Fix: verify there is enough space in the pool when creating new pool items while loading old savegames
|
14 years ago |
smatz
|
8608a7c29b
|
(svn r22025) -Fix: verify there is enough space in the pool when creating new pool items while loading old savegames
|
14 years ago |
frosch
|
ef3ec0f8c8
|
(svn r21987) -Fix: Make news items, engine previews and AI preview events deal with no longer existing Engine items after resetting the pool.
|
14 years ago |
frosch
|
c003e1a358
|
(svn r21987) -Fix: Make news items, engine previews and AI preview events deal with no longer existing Engine items after resetting the pool.
|
14 years ago |
frosch
|
faa2a26ae1
|
(svn r21986) -Codechange: Add helper function to test whether an engine is still associated to a GRF.
|
14 years ago |
frosch
|
dd1c718ac7
|
(svn r21986) -Codechange: Add helper function to test whether an engine is still associated to a GRF.
|
14 years ago |
frosch
|
915e339d0f
|
(svn r21975) -Add: console command to reset the engine pool. It removes the traces of engines which are no longer associated to a NewGRF, and can be used to e.g. 'fix' scenarios which were screwed up by the author. You can only use it when there are no vehicles in the game though.
|
14 years ago |
frosch
|
447f3dbe2c
|
(svn r21975) -Add: console command to reset the engine pool. It removes the traces of engines which are no longer associated to a NewGRF, and can be used to e.g. 'fix' scenarios which were screwed up by the author. You can only use it when there are no vehicles in the game though.
|
14 years ago |
rubidium
|
b8c9988d9f
|
(svn r21842) -Feature [FS#4393]: [NewGRF] Introduction dates/required types for rail types; e.g. introduce a particular rail type in 1960 (or when a vehicle using it is introduced), but also allow limiting its introduction to only happen when the required railtypes are available
|
14 years ago |
rubidium
|
abc1828d30
|
(svn r21842) -Feature [FS#4393]: [NewGRF] Introduction dates/required types for rail types; e.g. introduce a particular rail type in 1960 (or when a vehicle using it is introduced), but also allow limiting its introduction to only happen when the required railtypes are available
|
14 years ago |
rubidium
|
6371b75bcc
|
(svn r21841) -Feature: [NewGRF] Allow to define other railtypes that should be introduced if a particular rail type is introduced, e.g. to make sure slow rail is introduced when fast rail gets introduced
|
14 years ago |
rubidium
|
dc94c94599
|
(svn r21841) -Feature: [NewGRF] Allow to define other railtypes that should be introduced if a particular rail type is introduced, e.g. to make sure slow rail is introduced when fast rail gets introduced
|
14 years ago |
smatz
|
aa4f269f3e
|
(svn r21652) -Cleanup: one semicolon is enough
|
14 years ago |
smatz
|
61ad6990b9
|
(svn r21652) -Cleanup: one semicolon is enough
|
14 years ago |
rubidium
|
ab9cc74ba5
|
(svn r21410) -Codechange: limit engine name by amount of characters, not bytes
|
14 years ago |
rubidium
|
4d6cd55877
|
(svn r21410) -Codechange: limit engine name by amount of characters, not bytes
|
14 years ago |
planetmaker
|
f6aa80c617
|
(svn r21374) -Fix: Purchases lists were not invalidated when using 'resetengines'
|
14 years ago |
planetmaker
|
0f0be0d866
|
(svn r21374) -Fix: Purchases lists were not invalidated when using 'resetengines'
|
14 years ago |
rubidium
|
2223ff92c7
|
(svn r21240) -Feature: [NewGRF] Implement action0 visual effect properties for ships and RVs (Hirundo)
|
14 years ago |
rubidium
|
3969e4f951
|
(svn r21240) -Feature: [NewGRF] Implement action0 visual effect properties for ships and RVs (Hirundo)
|
14 years ago |
rubidium
|
46186134c8
|
(svn r21239) -Codechange/Fix: [NewGRF] Use 0xFF instead of 0 as default value for visual effect. This makes setting train prop 22 to 0 actually work (Hirundo)
|
14 years ago |
rubidium
|
a56627cc77
|
(svn r21239) -Codechange/Fix: [NewGRF] Use 0xFF instead of 0 as default value for visual effect. This makes setting train prop 22 to 0 actually work (Hirundo)
|
14 years ago |
planetmaker
|
c36da4841b
|
(svn r21101) -Doc: Additions and clarifications of doxygen comments
|
14 years ago |
planetmaker
|
d3dd03fd6b
|
(svn r21101) -Doc: Additions and clarifications of doxygen comments
|
14 years ago |
terkhen
|
b65df93121
|
(svn r21100) -Feature [NewGRF]: Add CB36 support for road vehicle property 0x15 (Speed).
|
14 years ago |
terkhen
|
38d9eed25c
|
(svn r21100) -Feature [NewGRF]: Add CB36 support for road vehicle property 0x15 (Speed).
|
14 years ago |
terkhen
|
c87e023d7a
|
(svn r21058) -Feature [NewGRF]: Add CB36 support for road vehicle properties 0x13 (Power), 0x14 (Weight) and 0x18 (Tractive effort).
|
14 years ago |
terkhen
|
867f7b5f7b
|
(svn r21058) -Feature [NewGRF]: Add CB36 support for road vehicle properties 0x13 (Power), 0x14 (Weight) and 0x18 (Tractive effort).
|
14 years ago |
terkhen
|
897bb71621
|
(svn r20856) -Fix [FS#4141]: Road/water toolbars did not get updated when the first vehicle of their type becomes available.
|
14 years ago |
terkhen
|
6c9580d6d0
|
(svn r20856) -Fix [FS#4141]: Road/water toolbars did not get updated when the first vehicle of their type becomes available.
|
14 years ago |
rubidium
|
29b489a055
|
(svn r20437) -Codechange: lets Engines use GRFFilePropsBase as well
|
14 years ago |
rubidium
|
b5d5a4e159
|
(svn r20437) -Codechange: lets Engines use GRFFilePropsBase as well
|
14 years ago |
alberth
|
5556955960
|
(svn r20318) -Doc: Doxygen additions.
|
14 years ago |
alberth
|
ccbacfc298
|
(svn r20318) -Doc: Doxygen additions.
|
14 years ago |
alberth
|
73f45d16d1
|
(svn r20317) -Codechange: Move variable declaration to their first use.
|
14 years ago |
alberth
|
6c01a5833c
|
(svn r20317) -Codechange: Move variable declaration to their first use.
|
14 years ago |
frosch
|
4bd32799f1
|
(svn r20286) -Codechange: Unify end of doxygen comments.
|
14 years ago |
frosch
|
c18839704b
|
(svn r20286) -Codechange: Unify end of doxygen comments.
|
14 years ago |
frosch
|
ed4f806f1d
|
(svn r20283) -Codechange: Unify start of doygen comments.
|
14 years ago |
frosch
|
5b86c79fce
|
(svn r20283) -Codechange: Unify start of doygen comments.
|
14 years ago |
alberth
|
be6c058424
|
(svn r20211) -Codechange: Indented code should have curly braces around it.
|
14 years ago |
alberth
|
137e2b64c9
|
(svn r20211) -Codechange: Indented code should have curly braces around it.
|
14 years ago |
rubidium
|
e809c05099
|
(svn r20164) -Fix [FS#3870]: inconsistencies w.r.t. to km/h vs km-ish/h as "base" unit for aircraft speeds
|
14 years ago |
rubidium
|
1b507dcf66
|
(svn r20164) -Fix [FS#3870]: inconsistencies w.r.t. to km/h vs km-ish/h as "base" unit for aircraft speeds
|
14 years ago |
frosch
|
1055c2b0fd
|
(svn r20106) -Fix (r5999): Engine and vehicle age were clamped at 0xFFFF, though there are 32bit available.
|
14 years ago |
frosch
|
782ec1bbff
|
(svn r20106) -Fix (r5999): Engine and vehicle age were clamped at 0xFFFF, though there are 32bit available.
|
14 years ago |
frosch
|
557c3f7daa
|
(svn r19879) -Codechange: Also hide invalid engines from purchase lists.
|
15 years ago |
frosch
|
2eb1e2564b
|
(svn r19879) -Codechange: Also hide invalid engines from purchase lists.
|
15 years ago |
yexo
|
9a2e53e803
|
(svn r19660) -Feature: [NewGRF] support cb36 for aircraft speed also in the build menu
|
15 years ago |
yexo
|
f8e1732e6d
|
(svn r19660) -Feature: [NewGRF] support cb36 for aircraft speed also in the build menu
|
15 years ago |
terkhen
|
d7f7c8949f
|
(svn r19360) -Add: [NewGRF] When the tractive effort of a road vehicle is not set, use a default value of 4C.
|
15 years ago |
terkhen
|
e4bb3f80b7
|
(svn r19360) -Add: [NewGRF] When the tractive effort of a road vehicle is not set, use a default value of 4C.
|
15 years ago |
terkhen
|
be3b839ded
|
(svn r19347) -Add: Vehicle GUI now shows power, weight and tractive effort for road vehicles.
|
15 years ago |
terkhen
|
f27186e617
|
(svn r19347) -Add: Vehicle GUI now shows power, weight and tractive effort for road vehicles.
|
15 years ago |
frosch
|
63b01f2009
|
(svn r19218) -Feature: [NewGRF] Add CB36 support for aircraft properties 0F and 11. (Eddi)
|
15 years ago |
frosch
|
89e7d3bd2b
|
(svn r19218) -Feature: [NewGRF] Add CB36 support for aircraft properties 0F and 11. (Eddi)
|
15 years ago |
rubidium
|
82fc28f77f
|
(svn r18809) -Codechange/Cleanup: remove unneeded headers from some files, if a header require a header make it include that header
|
15 years ago |
rubidium
|
9467b7c6d6
|
(svn r18809) -Codechange/Cleanup: remove unneeded headers from some files, if a header require a header make it include that header
|
15 years ago |
rubidium
|
b00a5f1069
|
(svn r18330) -Cleanup: remove some unneeded includes
|
15 years ago |
rubidium
|
da30e736ca
|
(svn r18330) -Cleanup: remove some unneeded includes
|
15 years ago |
frosch
|
d507136e04
|
(svn r18268) -Feature: [NewGRF] Make price base multipliers related to vehicles only apply to the GRF locally, if it defines engines of that type itself.
|
15 years ago |
frosch
|
f60a437d36
|
(svn r18268) -Feature: [NewGRF] Make price base multipliers related to vehicles only apply to the GRF locally, if it defines engines of that type itself.
|
15 years ago |
frosch
|
912bce0b8c
|
(svn r18266) -Codechange: Add a function to compute prices from price base and cost factor and use it consistently for vehicle purchase, running cost, and refit cost.
|
15 years ago |
frosch
|
fe65c7f833
|
(svn r18266) -Codechange: Add a function to compute prices from price base and cost factor and use it consistently for vehicle purchase, running cost, and refit cost.
|
15 years ago |
rubidium
|
c2221885f4
|
(svn r18027) -Codechange: make some unneededly global variables static and remove some unused variables
|
15 years ago |
rubidium
|
b2d7edddfa
|
(svn r18027) -Codechange: make some unneededly global variables static and remove some unused variables
|
15 years ago |
frosch
|
6ca8f6e380
|
(svn r18011) -Feature(ette): [NewGRF] CB 36 for roadvehicle property 09 'running cost factor'.
|
15 years ago |
frosch
|
1bd8a982d5
|
(svn r18011) -Feature(ette): [NewGRF] CB 36 for roadvehicle property 09 'running cost factor'.
|
15 years ago |
frosch
|
ba1fc280e3
|
(svn r18005) -Codechange: Convert the Prices struct into an array and an enum.
|
15 years ago |
frosch
|
040404c5d3
|
(svn r18005) -Codechange: Convert the Prices struct into an array and an enum.
|
15 years ago |
frosch
|
67cae40ec1
|
(svn r17926) -Fix (r9352): Make the decision whether aircraft carry mail consistent. Now always the cargo class decides.
|
15 years ago |
frosch
|
9fafef56d0
|
(svn r17926) -Fix (r9352): Make the decision whether aircraft carry mail consistent. Now always the cargo class decides.
|
15 years ago |
frosch
|
83894809d0
|
(svn r17897) -Fix [FS#3255]: CB15 and CB36 (capacity) were not always called when they should.
-Codechange: Move capacity calculation to a single function for all vehicle types, so the behaviour can be kept consistent easier.
|
15 years ago |
frosch
|
23980e6486
|
(svn r17897) -Fix [FS#3255]: CB15 and CB36 (capacity) were not always called when they should.
-Codechange: Move capacity calculation to a single function for all vehicle types, so the behaviour can be kept consistent easier.
|
15 years ago |
frosch
|
59195a6f20
|
(svn r17758) -Revert (r17208): Use assert_compile() if you cannot count.
-Fix (r7326): Powernaut Helicopter got wrong 'load amount'.
-Fix (r2639): Call the Evil by its name.
|
15 years ago |
frosch
|
76ff3aaf8f
|
(svn r17758) -Revert (r17208): Use assert_compile() if you cannot count.
-Fix (r7326): Powernaut Helicopter got wrong 'load amount'.
-Fix (r2639): Call the Evil by its name.
|
15 years ago |
frosch
|
f3aacb8fe3
|
(svn r17725) -Codechange: Reduce usage of EngInfo and XxxVehInfo, esp. when a Engine * is already present.
|
15 years ago |
frosch
|
4cb5a3e8a2
|
(svn r17725) -Codechange: Reduce usage of EngInfo and XxxVehInfo, esp. when a Engine * is already present.
|
15 years ago |
frosch
|
b243f6ca97
|
(svn r17700) -Codechange: Integrate ShipVehicleInfo::refittable into EngineInfo::refit_mask during initialisation.
|
15 years ago |
frosch
|
2adc2f4324
|
(svn r17700) -Codechange: Integrate ShipVehicleInfo::refittable into EngineInfo::refit_mask during initialisation.
|
15 years ago |
rubidium
|
d6cded5380
|
(svn r17693) -Cleanup: remove some unneeded includes
|
15 years ago |
rubidium
|
982b8ee5fc
|
(svn r17693) -Cleanup: remove some unneeded includes
|
15 years ago |
frosch
|
e261d8d9a0
|
(svn r17616) -Codechange [FS#3222]: Enumerize properties used in callback 0x36. Based on Terkhen's work.
|
15 years ago |
frosch
|
b6156da5e9
|
(svn r17616) -Codechange [FS#3222]: Enumerize properties used in callback 0x36. Based on Terkhen's work.
|
15 years ago |
rubidium
|
04d5b67eb6
|
(svn r17567) -Fix: some doxygen warnings
|
15 years ago |
rubidium
|
06e490fadc
|
(svn r17567) -Fix: some doxygen warnings
|
15 years ago |
rubidium
|
64bafcbe18
|
(svn r17534) -Codechange: unify the naming of callback masks/flags
|
15 years ago |
rubidium
|
c2c0f4403e
|
(svn r17534) -Codechange: unify the naming of callback masks/flags
|
15 years ago |
frosch
|
ebd916be3d
|
(svn r17532) -Codechange: Rename several Invalidate functions to SetDirty for more consistency and distinguishability.
|
15 years ago |
frosch
|
0e36260337
|
(svn r17532) -Codechange: Rename several Invalidate functions to SetDirty for more consistency and distinguishability.
|
15 years ago |
alberth
|
1ba000be12
|
(svn r17327) -Codechange: Allow external use of GetEngineCategoryName().
|
15 years ago |
alberth
|
174284d526
|
(svn r17327) -Codechange: Allow external use of GetEngineCategoryName().
|
15 years ago |
rubidium
|
cd6da9ef01
|
(svn r17296) -Fix/feature [FS#3152]: allow rail wagons to be build when only el rail engines are available
|
15 years ago |
rubidium
|
169df83012
|
(svn r17296) -Fix/feature [FS#3152]: allow rail wagons to be build when only el rail engines are available
|
15 years ago |
rubidium
|
7fbc33dae1
|
(svn r17248) -Fix: add GPL license notice where appropriate
|
15 years ago |
rubidium
|
99d46e0ad7
|
(svn r17248) -Fix: add GPL license notice where appropriate
|
15 years ago |
frosch
|
8bd029015e
|
(svn r17209) -Codechange: Move cargo_type from (Rail|Road|Ship)VehicleInfo to EngineInfo.
|
15 years ago |
frosch
|
0ddf9c86e1
|
(svn r17209) -Codechange: Move cargo_type from (Rail|Road|Ship)VehicleInfo to EngineInfo.
|
15 years ago |
rubidium
|
1fe3ad3288
|
(svn r17075) -Codechange: rename ~750 strings to be more uniform with their relatives
|
15 years ago |
rubidium
|
d61be2637e
|
(svn r17075) -Codechange: rename ~750 strings to be more uniform with their relatives
|
15 years ago |
rubidium
|
4b2592dbc0
|
(svn r17062) -Change: unify the naming of some 125 strings
|
15 years ago |
rubidium
|
5bb7b8ad35
|
(svn r17062) -Change: unify the naming of some 125 strings
|
15 years ago |
frosch
|
20c1e42be1
|
(svn r16929) -Change: There is no point in not randomising engine introduction-date before 1922. Instead disable the randomisation for the first two years after game-start, so you do not have to wait for the first engine.
|
15 years ago |
frosch
|
2a5982b836
|
(svn r16929) -Change: There is no point in not randomising engine introduction-date before 1922. Instead disable the randomisation for the first two years after game-start, so you do not have to wait for the first engine.
|
15 years ago |
rubidium
|
9980af2898
|
(svn r16921) -Codechange: make it more clear what strings are related to road vehicles; only ROAD isn't always enough. Also unify the way of writing it.
|
15 years ago |
rubidium
|
01eabc5f4c
|
(svn r16921) -Codechange: make it more clear what strings are related to road vehicles; only ROAD isn't always enough. Also unify the way of writing it.
|
15 years ago |
smatz
|
b6960e4e17
|
(svn r16814) -Codechange: make IsNormalAircraft() member of Aircraft
|
15 years ago |
smatz
|
64de470917
|
(svn r16814) -Codechange: make IsNormalAircraft() member of Aircraft
|
15 years ago |
smatz
|
868c21cbcc
|
(svn r16813) -Codechange: make IsEngineCountable() member of Vehicle
|
15 years ago |
smatz
|
98b8479f56
|
(svn r16813) -Codechange: make IsEngineCountable() member of Vehicle
|
15 years ago |
yexo
|
44c15e4196
|
(svn r16647) -Codechange: remove newgrf.h include from newgrf_engine.h to prevent unnecessary inclusion newgrf.h anyway
|
15 years ago |
yexo
|
b00726a5d2
|
(svn r16647) -Codechange: remove newgrf.h include from newgrf_engine.h to prevent unnecessary inclusion newgrf.h anyway
|
15 years ago |
rubidium
|
35aabc1d4c
|
(svn r16586) -Codechange: don't store lifelength in the savegame; it can easily be calculated, it isn't used often and now changing extend_vehicle_life in game has some effect.
|
15 years ago |
rubidium
|
11c7c258dd
|
(svn r16586) -Codechange: don't store lifelength in the savegame; it can easily be calculated, it isn't used often and now changing extend_vehicle_life in game has some effect.
|
15 years ago |
rubidium
|
512b021e26
|
(svn r16581) -Codechange: unify the access to Engine::lifelength.
|
15 years ago |
rubidium
|
8ca2ccc456
|
(svn r16581) -Codechange: unify the access to Engine::lifelength.
|
15 years ago |
rubidium
|
4b05617c42
|
(svn r16580) -Codechange: rename Engine::image_index to original_image_index to not confuse it with image_index from *VehInfo.
|
15 years ago |
rubidium
|
ee96d737b2
|
(svn r16580) -Codechange: rename Engine::image_index to original_image_index to not confuse it with image_index from *VehInfo.
|
15 years ago |
alberth
|
bab70a823d
|
(svn r16491) -Codechange: Added parentheses around bitwise operators for code style.
|
16 years ago |
alberth
|
580e478e4e
|
(svn r16491) -Codechange: Added parentheses around bitwise operators for code style.
|
16 years ago |