Thema geschlossen 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Abnutzung der Gleise
Verfasser Nachricht
Bernhard
Forum-Team
*****

Beiträge: 9.401
Themen: 185
Registriert seit: Jan 2004
#15
 
hier ist der Thread. Bei mir ist es allerdings nie gelaufen .

http://www.tt-forums.net/viewtopic.php?t=9293

und hier die Diff großes Grinsen http://www.tt-forums.net//files/usedtracksv1.diff

Code:
Index: OpenTTD_UsedTracks/ttd.h =================================================================== --- OpenTTD_UsedTracks/ttd.h (revision 71) +++ OpenTTD_UsedTracks/ttd.h (working copy) @@ -472,7 +472,8 @@ enum Sprites { SPR_CANALS_BASE = 0x1406, SPR_SLOPES_BASE = SPR_CANALS_BASE + 70, - SPR_OPENTTD_BASE = SPR_SLOPES_BASE + 74, + SPR_OPENTTD_BASE = SPR_SLOPES_BASE + 74, + SPR_USED_TRACKS_BASE = SPR_OPENTTD_BASE + 75, }; enum MAP_OWNERS { Index: OpenTTD_UsedTracks/variables.h =================================================================== --- OpenTTD_UsedTracks/variables.h (revision 71) +++ OpenTTD_UsedTracks/variables.h (working copy) @@ -397,7 +397,9 @@ extern byte _map3_hi[TILES_X * TILES_Y]; extern byte _map_owner[TILES_X * TILES_Y]; extern byte _map2[TILES_X * TILES_Y]; -extern byte _map_extra_bits[TILES_X * TILES_Y/4]; +extern byte _map_extra_bits[TILES_X * TILES_Y/4]; +// usage of tracks need bits +extern byte _map_usage[TILES_X * TILES_Y]; static const byte _inclined_tileh[] = { 3,9,3,6,12,6,12,9, Index: OpenTTD_UsedTracks/gfx.h =================================================================== --- OpenTTD_UsedTracks/gfx.h (revision 71) +++ OpenTTD_UsedTracks/gfx.h (working copy) @@ -102,6 +102,7 @@ //enum { NUM_SPRITES = 0x1320 }; //enum { NUM_SPRITES = 0x1500 }; enum { NUM_SPRITES = 0x3500 }; // 1500 + space for custom GRF sets + /* tables.h */ extern byte _palettes[4][256 * 3]; Index: OpenTTD_UsedTracks/train_cmd.c =================================================================== --- OpenTTD_UsedTracks/train_cmd.c (revision 71) +++ OpenTTD_UsedTracks/train_cmd.c (working copy) @@ -2096,6 +2096,9 @@ AffectSpeedByDirChange(v, chosen_dir); } + // al is ok, update track usage: + UpdateTrackUsage(v->tile,1); + v->direction = chosen_dir; } } else { Index: OpenTTD_UsedTracks/rail_cmd.c =================================================================== --- OpenTTD_UsedTracks/rail_cmd.c (revision 71) +++ OpenTTD_UsedTracks/rail_cmd.c (working copy) @@ -31,6 +31,14 @@ RAIL_CHECKPOINT_TRACK_MASK = 1, RAIL_CHECKPOINT_UNUSED_BITS = 0x3E, }; + +enum { /* track usage */ + USAGE_NEVER = 0, + USAGE_RARE = 5, + USAGE_NORMAL = 50, + USAGE_OFTEN = 100, +}; + #define IS_RAIL_DEPOT(x) (((x) & (RAIL_TYPE_DEPOT|RAIL_DEPOT_UNUSED_BITS)) == RAIL_TYPE_DEPOT) #define IS_RAIL_CHECKPOINT(x) (((x) & (RAIL_TYPE_CHECKPOINT|RAIL_CHECKPOINT_UNUSED_BITS)) == RAIL_TYPE_CHECKPOINT) @@ -92,8 +100,37 @@ * 01abcdef => rail w/ signals * 10uuuuuu => unused * 11uuuudd => rail depot - */ + */ + +// return (new) state of track +int UpdateTrackUsage(uint tile, int amount) +{ + int before = _map_usage[tile]; + + // do nothing. + if (amount >=0 ) { + if (_map_usage[tile] >= 200 ) amount = 0; + }else{// decrease + if (_map_usage[tile] == USAGE_NEVER ) amount = 0; + } + + _map_usage[tile] += amount; + + if (before != _map_usage[tile]) + MarkTileDirtyByTile(tile); + + + if (_map_usage[tile]== USAGE_NEVER) return USAGE_NEVER; + + else if (_map_usage[tile] < USAGE_NORMAL) return USAGE_RARE; + + else if (_map_usage[tile] < USAGE_OFTEN) return USAGE_NORMAL; + + else return USAGE_OFTEN; + +} + static bool CheckTrackCombination(byte map5, byte trackbits, byte flags) { _error_message = STR_1001_IMPOSSIBLE_TRACK_COMBINATION; @@ -364,7 +401,9 @@ _map_type_and_height[tile] &= 0xF; _map_type_and_height[tile] |= MP_RAILWAY << 4; _map5[tile] |= rail_bit; - _map2[tile] &= ~RAIL_MAP2LO_GROUND_MASK; + _map2[tile] &= ~RAIL_MAP2LO_GROUND_MASK; + + _map_usage[tile] = (USAGE_NORMAL + USAGE_OFTEN)/2; // start in between // In case it's a tile without signals, clear the signal bits. Why? if ((_map5[tile] & RAIL_TYPE_MASK) != RAIL_TYPE_SIGNALS) @@ -1403,72 +1442,89 @@ DetTrackDrawProc_Null, DetTrackDrawProc_Null, }; + + static void DrawTile_Track(TileInfo *ti) -{ +{ + // never, rarely, normal, often, standard, monorail, maglev + int usage_offs[4] = {0,59,118,177 }; uint32 tracktype_offs, image; - byte m5; + byte m5; + int u = 3; //0-3 _drawtile_track_palette = SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_map_owner[ti->tile])); + + if ( _map3_lo[ti->tile] & 0xF ){ //mono/maglev + tracktype_offs = (_map3_lo[ti->tile] & 0xF) * TRACKTYPE_SPRITE_PITCH; + }else{ // normal rail + switch (UpdateTrackUsage(ti->tile,0)){ + case USAGE_NEVER: u = 0; break; + case USAGE_RARE: u = 1; break; + case USAGE_NORMAL: u = 2; break; + case USAGE_OFTEN: u = 3; break; + } + tracktype_offs = SPR_USED_TRACKS_BASE + usage_offs[u] + 7 - 0x3F3; + } - tracktype_offs = (_map3_lo[ti->tile] & 0xF) * TRACKTYPE_SPRITE_PITCH; m5 = (byte)ti->map5; if (!(m5 & RAIL_TYPE_SPECIAL)) { - bool special; - + bool special; + m5 &= RAIL_BIT_MASK; + special = false; - // select the sprite to use based on the map5 byte. - (image = 0x3F3, m5 == RAIL_BIT_DIAG2) || - (image++, m5 == RAIL_BIT_DIAG1) || - (image++, m5 == RAIL_BIT_UPPER) || - (image++, m5 == RAIL_BIT_LOWER) || - (image++, m5 == RAIL_BIT_RIGHT) || - (image++, m5 == RAIL_BIT_LEFT) || - (image++, m5 == (RAIL_BIT_DIAG1|RAIL_BIT_DIAG2)) || - - (image = 0x40B, m5 == (RAIL_BIT_UPPER|RAIL_BIT_LOWER)) || - (image++, m5 == (RAIL_BIT_LEFT|RAIL_BIT_RIGHT)) || - - (special=true, false) || - - (image = 0x3FA, !(m5 & (RAIL_BIT_RIGHT|RAIL_BIT_UPPER|RAIL_BIT_DIAG1))) || - (image++, !(m5 & (RAIL_BIT_LEFT|RAIL_BIT_LOWER|RAIL_BIT_DIAG1))) || - (image++, !(m5 & (RAIL_BIT_LEFT|RAIL_BIT_UPPER|RAIL_BIT_DIAG2))) || - (image++, !(m5 & (RAIL_BIT_RIGHT|RAIL_BIT_LOWER|RAIL_BIT_DIAG2))) || - (image++, true); - - if (ti->tileh != 0) { - int f = GetRailFoundation(ti->tileh, ti->map5 & 0x3F); - if (f) DrawFoundation(ti, f); - - // default sloped sprites. - if (ti->tileh != 0) image = _track_sloped_sprites[ti->tileh - 1] + 0x3F3; + // select the sprite to use based on the map5 byte. + (image = 0x3F3, m5 == RAIL_BIT_DIAG2) || + (image++, m5 == RAIL_BIT_DIAG1) || + (image++, m5 == RAIL_BIT_UPPER) || + (image++, m5 == RAIL_BIT_LOWER) || + (image++, m5 == RAIL_BIT_RIGHT) || + (image++, m5 == RAIL_BIT_LEFT) || + (image++, m5 == (RAIL_BIT_DIAG1|RAIL_BIT_DIAG2)) || + + (image = 0x40B, m5 == (RAIL_BIT_UPPER|RAIL_BIT_LOWER)) || + (image++, m5 == (RAIL_BIT_LEFT|RAIL_BIT_RIGHT)) || + + (special=true, false) || + + (image = 0x3FA, !(m5 & (RAIL_BIT_RIGHT|RAIL_BIT_UPPER|RAIL_BIT_DIAG1))) || + (image++, !(m5 & (RAIL_BIT_LEFT|RAIL_BIT_LOWER|RAIL_BIT_DIAG1))) || + (image++, !(m5 & (RAIL_BIT_LEFT|RAIL_BIT_UPPER|RAIL_BIT_DIAG2))) || + (image++, !(m5 & (RAIL_BIT_RIGHT|RAIL_BIT_LOWER|RAIL_BIT_DIAG2))) || + (image++, true); + + if (ti->tileh != 0) { + int f = GetRailFoundation(ti->tileh, ti->map5 & 0x3F); + if (f) DrawFoundation(ti, f); + + // default sloped sprites. + if (ti->tileh != 0) image = _track_sloped_sprites[ti->tileh - 1] + 0x3F3; + } + + if ((_map2[ti->tile] & RAIL_MAP2LO_GROUND_MASK)==RAIL_GROUND_BROWN) + image = (image & 0xFFFF) | 0x3178000; // use a brown palette + else if ((_map2[ti->tile] & RAIL_MAP2LO_GROUND_MASK)==RAIL_GROUND_ICE_DESERT) + image += 26; + + DrawGroundSprite(image + tracktype_offs); + + if (special) { + if (m5 & RAIL_BIT_DIAG1) DrawGroundSprite(0x3ED + tracktype_offs); + if (m5 & RAIL_BIT_DIAG2) DrawGroundSprite(0x3EE + tracktype_offs); + if (m5 & RAIL_BIT_UPPER) DrawGroundSprite(0x3EF + tracktype_offs); + if (m5 & RAIL_BIT_LOWER) DrawGroundSprite(0x3F0 + tracktype_offs); + if (m5 & RAIL_BIT_LEFT) DrawGroundSprite(0x3F2 + tracktype_offs); + if (m5 & RAIL_BIT_RIGHT) DrawGroundSprite(0x3F1 + tracktype_offs); + } + + if (_display_opt & DO_FULL_DETAIL) { + _detailed_track_proc[_map2[ti->tile] & RAIL_MAP2LO_GROUND_MASK](ti); } - if ((_map2[ti->tile] & RAIL_MAP2LO_GROUND_MASK)==RAIL_GROUND_BROWN) - image = (image & 0xFFFF) | 0x3178000; // use a brown palette - else if ((_map2[ti->tile] & RAIL_MAP2LO_GROUND_MASK)==RAIL_GROUND_ICE_DESERT) - image += 26; - - DrawGroundSprite(image + tracktype_offs); - - if (special) { - if (m5 & RAIL_BIT_DIAG1) DrawGroundSprite(0x3ED + tracktype_offs); - if (m5 & RAIL_BIT_DIAG2) DrawGroundSprite(0x3EE + tracktype_offs); - if (m5 & RAIL_BIT_UPPER) DrawGroundSprite(0x3EF + tracktype_offs); - if (m5 & RAIL_BIT_LOWER) DrawGroundSprite(0x3F0 + tracktype_offs); - if (m5 & RAIL_BIT_LEFT) DrawGroundSprite(0x3F2 + tracktype_offs); - if (m5 & RAIL_BIT_RIGHT) DrawGroundSprite(0x3F1 + tracktype_offs); - } - - if (_display_opt & DO_FULL_DETAIL) { - _detailed_track_proc[_map2[ti->tile] & RAIL_MAP2LO_GROUND_MASK](ti); - } - /* draw signals also? */ if (!(ti->map5 & RAIL_TYPE_SIGNALS)) return; @@ -1511,8 +1567,12 @@ } } else { const byte *s; - const DrawTrackSeqStruct *drss; + const DrawTrackSeqStruct *drss; + + // to normal value again(depots and stuff) + tracktype_offs = (_map3_lo[ti->tile] & 0xF) * TRACKTYPE_SPRITE_PITCH; + if (!(m5 & (RAIL_TYPE_MASK&~RAIL_TYPE_SPECIAL))) return; @@ -1854,7 +1914,9 @@ byte m2; byte owner; - m2 = _map2[tile] & 0xF; + m2 = _map2[tile] & 0xF; + + UpdateTrackUsage(tile,-1); /* special code for alps landscape */ if (_opt.landscape == LT_HILLY) { Index: OpenTTD_UsedTracks/landscape.c =================================================================== --- OpenTTD_UsedTracks/landscape.c (revision 71) +++ OpenTTD_UsedTracks/landscape.c (working copy) @@ -12,7 +12,8 @@ byte _map3_hi[TILES_X * TILES_Y]; byte _map_owner[TILES_X * TILES_Y]; byte _map2[TILES_X * TILES_Y]; -byte _map_extra_bits[TILES_X * TILES_Y/4]; +byte _map_extra_bits[TILES_X * TILES_Y/4]; +byte _map_usage[TILES_X * TILES_Y]; extern const TileTypeProcs _tile_type_clear_procs, @@ -499,7 +500,8 @@ for(i=0; i!=TILES_Y-1; i++) memset(_map_type_and_height + i*TILES_X, 0, TILES_X-1); - memset(_map5, 3, sizeof(_map5)); + memset(_map5, 3, sizeof(_map5)); + memset(_map_usage,0,sizeof(_map_usage)); } void ConvertGroundTilesIntoWaterTiles() Index: OpenTTD_UsedTracks/spritecache.c =================================================================== --- OpenTTD_UsedTracks/spritecache.c (revision 71) +++ OpenTTD_UsedTracks/spritecache.c (working copy) @@ -699,7 +699,11 @@ load_index = SPR_CANALS_BASE; load_index += LoadGrfFile("canalsw.grf", load_index, i++); /* XXX: Only for debugging. Will be more generic. */ - + + // Dribbel: Used Tracks + load_index = SPR_USED_TRACKS_BASE; + load_index += LoadGrfFile("used.grf", load_index, i++); + for(j=0; j!=lengthof(_newgrf_files) && _newgrf_files[j]; j++) load_index += LoadGrfFile(_newgrf_files[j], load_index, i++); @@ -714,7 +718,8 @@ FioOpenFile(i,_filename_list[i]); FioOpenFile(i, "openttd.grf"); - FioOpenFile(i+1, "canalsw.grf"); + FioOpenFile(i+1, "canalsw.grf"); + FioOpenFile(i+2, "used.grf"); if (_sprite_page_to_load != 0) FioOpenFile(i+2, _landscape_filenames[_sprite_page_to_load-1]);
"Das Böse triumphiert alleine dadurch, daß gute Menschen nichts unternehmen!" Edward Burke, 1729-1797

"Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont!" Konrad Adenauer, 1876-1967 Zwinkern

21.02.2006, 20:10
Suchen
Thema geschlossen 


Nachrichten in diesem Thema
Abnutzung der Gleise - von Locke - 01.04.2005, 17:40
[Kein Betreff] - von Puffer_MBO - 01.04.2005, 18:00
[Kein Betreff] - von RK - 01.04.2005, 18:25
[Kein Betreff] - von Bernhard - 01.04.2005, 18:38
[Kein Betreff] - von bugfix - 01.04.2005, 19:51
[Kein Betreff] - von Bernhard - 01.04.2005, 20:57
[Kein Betreff] - von Supernova - 10.04.2005, 06:55
[Kein Betreff] - von Roter Baron - 25.06.2005, 19:40
[Kein Betreff] - von killking - 25.06.2005, 21:37
[Kein Betreff] - von RK - 25.06.2005, 21:52
[Kein Betreff] - von killking - 25.06.2005, 23:23
[Kein Betreff] - von RK - 26.06.2005, 09:53
[Kein Betreff] - von killking - 26.06.2005, 12:56
[Kein Betreff] - von jkl - 21.02.2006, 18:13
[Kein Betreff] - von Bernhard - 21.02.2006, 20:10

Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  zwei Gleise auf einem Quadrat officercrockey 11 6.340 27.09.2010, 20:17
Letzter Beitrag: DonRazzi

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste

Kontakt | Transport Tycoon Main Station | Nach oben | Archiv-Modus | RSS-Synchronisation