Skip to content

Commit 78dc5ec

Browse files
committed
ADD: Maintenance costs for roadsigns and signals
git-svn-id: svn://tron.homeunix.org/simutrans/simutrans/trunk@11648 8aca7d54-2c30-db11-9de9-000461428c89
1 parent 02135b0 commit 78dc5ec

File tree

3 files changed

+59
-46
lines changed

3 files changed

+59
-46
lines changed

simutrans/history.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
FIX: makro building with way order and stations extensions fixed
99
FIX: Freelist allocated objects (tiles, ways, trees etc.) use 3x more memory than necessary
1010
FIX: Do not change underground mode when scrolling from the minimap
11+
ADD: Monthly maintenance for roadsigns and signals (maintenance=1234 in dat file)
1112

1213

1314
Release of 124.3 (r11590 on 10-Jan-2025):

src/simutrans/descriptor/reader/roadsign_reader.cc

Lines changed: 46 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
#include "../../network/pakset_info.h"
1818
#include "../../tpl/array_tpl.h"
1919

20+
#include <cinttypes>
21+
2022

2123
void roadsign_reader_t::register_obj(obj_desc_t *&data)
2224
{
@@ -36,7 +38,7 @@ bool roadsign_reader_t::successfully_loaded() const
3638
}
3739

3840

39-
obj_desc_t * roadsign_reader_t::read_node(FILE *fp, obj_node_info_t &node)
41+
obj_desc_t *roadsign_reader_t::read_node(FILE *fp, obj_node_info_t &node)
4042
{
4143
array_tpl<char> desc_buf(node.size);
4244
if (fread(desc_buf.begin(), node.size, 1, fp) != 1) {
@@ -48,55 +50,62 @@ obj_desc_t * roadsign_reader_t::read_node(FILE *fp, obj_node_info_t &node)
4850
const int version = v & 0x8000 ? v & 0x7FFF : 0;
4951
roadsign_desc_t *desc = new roadsign_desc_t();
5052

51-
if(version==5) {
52-
// Versioned node, version 5
53-
desc->min_speed = kmh_to_speed(decode_uint16(p));
54-
desc->price = decode_uint32(p);
55-
desc->flags = decode_uint16(p);
53+
if (version == 6) {
54+
// cost as sint64, maintenance added
55+
desc->min_speed = kmh_to_speed(decode_uint16(p));
56+
desc->price = decode_sint64(p);
57+
desc->maintenance = decode_sint64(p);
58+
desc->flags = decode_uint16(p);
59+
desc->offset_left = decode_sint8(p);
60+
desc->wtyp = decode_uint8(p);
61+
desc->intro_date = decode_uint16(p);
62+
desc->retire_date = decode_uint16(p);
63+
}
64+
else if (version == 5) {
65+
desc->min_speed = kmh_to_speed(decode_uint16(p));
66+
desc->price = decode_uint32(p);
67+
desc->flags = decode_uint16(p);
5668
desc->offset_left = decode_sint8(p);
57-
desc->wtyp = decode_uint8(p);
58-
desc->intro_date = decode_uint16(p);
69+
desc->wtyp = decode_uint8(p);
70+
desc->intro_date = decode_uint16(p);
5971
desc->retire_date = decode_uint16(p);
6072
}
61-
else if(version==4) {
62-
// Versioned node, version 4
63-
desc->min_speed = kmh_to_speed(decode_uint16(p));
64-
desc->price = decode_uint32(p);
65-
desc->flags = decode_uint8(p);
73+
else if (version == 4) {
74+
desc->min_speed = kmh_to_speed(decode_uint16(p));
75+
desc->price = decode_uint32(p);
76+
desc->flags = decode_uint8(p);
6677
desc->offset_left = decode_sint8(p);
67-
desc->wtyp = decode_uint8(p);
68-
desc->intro_date = decode_uint16(p);
78+
desc->wtyp = decode_uint8(p);
79+
desc->intro_date = decode_uint16(p);
6980
desc->retire_date = decode_uint16(p);
7081
}
71-
else if(version==3) {
72-
// Versioned node, version 3
73-
desc->min_speed = kmh_to_speed(decode_uint16(p));
74-
desc->price = decode_uint32(p);
75-
desc->flags = decode_uint8(p);
82+
else if (version == 3) {
83+
desc->min_speed = kmh_to_speed(decode_uint16(p));
84+
desc->price = decode_uint32(p);
85+
desc->flags = decode_uint8(p);
7686
desc->offset_left = 14;
77-
desc->wtyp = decode_uint8(p);
78-
desc->intro_date = decode_uint16(p);
87+
desc->wtyp = decode_uint8(p);
88+
desc->intro_date = decode_uint16(p);
7989
desc->retire_date = decode_uint16(p);
8090
}
81-
else if(version==2) {
82-
// Versioned node, version 2
83-
desc->min_speed = kmh_to_speed(decode_uint16(p));
84-
desc->price = decode_uint32(p);
85-
desc->flags = decode_uint8(p);
91+
else if (version == 2) {
92+
desc->min_speed = kmh_to_speed(decode_uint16(p));
93+
desc->price = decode_uint32(p);
94+
desc->flags = decode_uint8(p);
8695
desc->offset_left = 14;
87-
desc->intro_date = DEFAULT_INTRO_YEAR*12;
96+
desc->intro_date = DEFAULT_INTRO_YEAR*12;
8897
desc->retire_date = DEFAULT_RETIRE_YEAR*12;
89-
desc->wtyp = road_wt;
98+
desc->wtyp = road_wt;
9099
}
91-
else if(version==1) {
100+
else if (version == 1) {
92101
// Versioned node, version 1
93-
desc->min_speed = kmh_to_speed(decode_uint16(p));
94-
desc->price = 50000;
95-
desc->flags = decode_uint8(p);
102+
desc->min_speed = kmh_to_speed(decode_uint16(p));
103+
desc->price = 50000;
104+
desc->flags = decode_uint8(p);
96105
desc->offset_left = 14;
97-
desc->intro_date = DEFAULT_INTRO_YEAR*12;
106+
desc->intro_date = DEFAULT_INTRO_YEAR*12;
98107
desc->retire_date = DEFAULT_RETIRE_YEAR*12;
99-
desc->wtyp = road_wt;
108+
desc->wtyp = road_wt;
100109
}
101110
else {
102111
dbg->fatal( "roadsign_reader_t::read_node()", "Cannot handle too new node version %i", version );
@@ -108,10 +117,11 @@ obj_desc_t * roadsign_reader_t::read_node(FILE *fp, obj_node_info_t &node)
108117
}
109118

110119
PAKSET_INFO("roadsign_reader_t::read_node()",
111-
"version=%i, min_speed=%i, price=%i, flags=%x, wtyp=%i, offset_left=%i, intro=%i/%i, retire=%i/%i",
120+
"version=%i, min_speed=%i, price=%" PRId64 ", maintenance=%" PRId64, "flags=%x, wtyp=%i, offset_left=%i, intro=%i/%i, retire=%i/%i",
112121
version,
113122
desc->min_speed,
114123
desc->price/100,
124+
desc->maintenance,
115125
desc->flags,
116126
desc->wtyp,
117127
desc->offset_left,

src/simutrans/descriptor/writer/roadsign_writer.cc

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,15 @@ void parse_images_numbered(slist_tpl<std::string>& keys, tabfileobj_t& obj)
7777
}
7878
}
7979

80+
8081
void roadsign_writer_t::write_obj(FILE* fp, obj_node_t& parent, tabfileobj_t& obj)
8182
{
82-
obj_node_t node(this, 16, &parent);
83-
84-
uint32 const price = obj.get_int("cost", 500) * 100;
85-
uint16 const min_speed = obj.get_int("min_speed", 0);
86-
sint8 const offset_left = obj.get_int("offset_left", 14);
87-
uint8 const wtyp = get_waytype(obj.get("waytype"));
88-
roadsign_desc_t::types flags = roadsign_desc_t::NONE;
83+
const sint64 price = obj.get_int64("cost", 500) * 100;
84+
const sint64 maintenance = obj.get_int64("maintenance", 0);
85+
const uint16 min_speed = obj.get_int("min_speed", 0);
86+
const sint8 offset_left = obj.get_int("offset_left", 14);
87+
const uint8 wtyp = get_waytype(obj.get("waytype"));
88+
roadsign_desc_t::types flags = roadsign_desc_t::NONE;
8989

9090
if( obj.get_int("is_signal",0) ) {
9191
flags = roadsign_desc_t::SIGN_SIGNAL;
@@ -113,10 +113,12 @@ void roadsign_writer_t::write_obj(FILE* fp, obj_node_t& parent, tabfileobj_t& ob
113113
}
114114
// this causes unused entries to give a warning that they are ignored
115115

116-
// write version data
117-
node.write_version(fp, 5);
116+
obj_node_t node(this, 28, &parent);
117+
118+
node.write_version(fp, 6);
118119
node.write_uint16(fp, min_speed);
119-
node.write_uint32(fp, price);
120+
node.write_sint64(fp, price);
121+
node.write_sint64(fp, maintenance);
120122
node.write_uint16(fp, flags);
121123
node.write_uint8 (fp, offset_left);
122124
node.write_uint8 (fp, wtyp);

0 commit comments

Comments
 (0)