mirror of https://github.com/OpenTTD/OpenTTD
(svn r4546) - NewGRF: add support for Action 0x05, type 0x04: replacement signal graphics. Thanks to Purno for supplying data to test
with.release/0.5
parent
4ad0c3cd75
commit
14b6860e62
24
newgrf.c
24
newgrf.c
|
@ -38,6 +38,7 @@ uint16 _custom_sprites_base;
|
||||||
static int _skip_sprites; // XXX
|
static int _skip_sprites; // XXX
|
||||||
static uint _file_index; // XXX
|
static uint _file_index; // XXX
|
||||||
extern int _traininfo_vehicle_pitch;
|
extern int _traininfo_vehicle_pitch;
|
||||||
|
SpriteID _signal_base = 0;
|
||||||
|
|
||||||
static GRFFile *_cur_grffile;
|
static GRFFile *_cur_grffile;
|
||||||
GRFFile *_first_grffile;
|
GRFFile *_first_grffile;
|
||||||
|
@ -1823,8 +1824,27 @@ static void GraphicsNew(byte *buf, int len)
|
||||||
type = grf_load_byte(&buf);
|
type = grf_load_byte(&buf);
|
||||||
num = grf_load_extended(&buf);
|
num = grf_load_extended(&buf);
|
||||||
|
|
||||||
grfmsg(GMS_NOTICE, "GraphicsNew: Custom graphics (type 0x%02X) sprite block of length %d (unimplemented, ignoring).\n",
|
switch (type) {
|
||||||
type, num);
|
case 0x04: /* Signal graphics */
|
||||||
|
if (num != 112 && num != 240) {
|
||||||
|
grfmsg(GMS_WARN, "GraphicsNews: Signal graphics sprite count must be 112 or 240, skipping.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_signal_base = _cur_spriteid;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
grfmsg(GMS_NOTICE, "GraphicsNew: Custom graphics (type 0x%02X) sprite block of length %u (unimplemented, ignoring).\n",
|
||||||
|
type, num);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
grfmsg(GMS_NOTICE, "GraphicsNew: Loading %u sprites of type 0x%02X at SpriteID 0x%04X", num, type, _cur_spriteid);
|
||||||
|
|
||||||
|
for (; num > 0; num--) {
|
||||||
|
LoadNextSprite(_cur_spriteid++, _file_index);
|
||||||
|
_nfo_line++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Action 0x06 */
|
/* Action 0x06 */
|
||||||
|
|
1
newgrf.h
1
newgrf.h
|
@ -60,6 +60,7 @@ typedef struct GRFConfig {
|
||||||
} GRFConfig;
|
} GRFConfig;
|
||||||
|
|
||||||
extern GRFConfig *_first_grfconfig;
|
extern GRFConfig *_first_grfconfig;
|
||||||
|
extern SpriteID _signal_base;
|
||||||
|
|
||||||
void LoadNewGRF(uint load_index, uint file_index);
|
void LoadNewGRF(uint load_index, uint file_index);
|
||||||
|
|
||||||
|
|
12
rail_cmd.c
12
rail_cmd.c
|
@ -26,6 +26,7 @@
|
||||||
#include "waypoint.h"
|
#include "waypoint.h"
|
||||||
#include "rail.h"
|
#include "rail.h"
|
||||||
#include "railtypes.h" // include table for railtypes
|
#include "railtypes.h" // include table for railtypes
|
||||||
|
#include "newgrf.h"
|
||||||
|
|
||||||
extern uint16 _custom_sprites_base;
|
extern uint16 _custom_sprites_base;
|
||||||
|
|
||||||
|
@ -1047,7 +1048,16 @@ static void DrawSingleSignal(TileIndex tile, byte condition, uint image, uint po
|
||||||
uint x = TileX(tile) * TILE_SIZE + SignalPositions[side][pos].x;
|
uint x = TileX(tile) * TILE_SIZE + SignalPositions[side][pos].x;
|
||||||
uint y = TileY(tile) * TILE_SIZE + SignalPositions[side][pos].y;
|
uint y = TileY(tile) * TILE_SIZE + SignalPositions[side][pos].y;
|
||||||
|
|
||||||
SpriteID sprite = SignalBase[side][GetSignalVariant(tile)][GetSignalType(tile)] + image + condition;
|
SpriteID sprite;
|
||||||
|
|
||||||
|
/* _signal_base is set by our NewGRF Action 5 loader. If it is 0 then we
|
||||||
|
* just draw the standard signals, else we get the offset from _signal_base
|
||||||
|
* and draw that sprite. All the signal sprites are loaded sequentially. */
|
||||||
|
if (_signal_base == 0 || (GetSignalType(tile) == 0 && GetSignalVariant(tile) == SIG_ELECTRIC)) {
|
||||||
|
sprite = SignalBase[side][GetSignalVariant(tile)][GetSignalType(tile)] + image + condition;
|
||||||
|
} else {
|
||||||
|
sprite = _signal_base + (GetSignalType(tile) - 1) * 16 + GetSignalVariant(tile) * 64 + image + condition;
|
||||||
|
}
|
||||||
|
|
||||||
AddSortableSpriteToDraw(sprite, x, y, 1, 1, 10, GetSlopeZ(x,y));
|
AddSortableSpriteToDraw(sprite, x, y, 1, 1, 10, GetSlopeZ(x,y));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue