(svn r609) Fixed choose waypoints dialogs, it works without assertion failures and with custom waypoint #0 selectable now. (pasky)
authordominik
Sun, 14 Nov 2004 20:25:07 +0000
changeset 412 3b10a6e44e7e
parent 411 dc46e54bd2ed
child 413 36f14a6d63d7
(svn r609) Fixed choose waypoints dialogs, it works without assertion failures and with custom waypoint #0 selectable now. (pasky)
rail_cmd.c
--- a/rail_cmd.c	Sun Nov 14 20:02:43 2004 +0000
+++ b/rail_cmd.c	Sun Nov 14 20:25:07 2004 +0000
@@ -736,7 +736,7 @@
 
 	if (flags & DC_EXEC) {
 		ModifyTile(tile, MP_MAP5, RAIL_TYPE_WAYPOINT | dir);
-		if (p1 & 0x100 && (p1 & 0xff)!=0) { // waypoint type 0 uses default graphics
+		if (--p1 & 0x100) { // waypoint type 0 uses default graphics
 			// custom graphics
 			_map3_lo[tile] |= 16;
 			_map3_hi[tile] = p1 & 0xff;
@@ -1626,20 +1626,11 @@
 
 void DrawWaypointSprite(int x, int y, int stat_id)
 {
-	struct StationSpec *stat = GetCustomStation('WAYP', stat_id);
+	struct StationSpec *stat;
 	uint32 relocation;
 	DrawTileSprites *cust;
 	DrawTileSeqStruct const *seq;
 	uint32 ormod, img;
-	const DrawTrackSeqStruct *dtss;
-	const byte *t;
-
-	assert(stat);
-
-	relocation = GetCustomStationRelocation(stat, NULL, 1);
-	// emulate station tile - open with building
-	// add 1 to get the other direction
-	cust = &stat->renderdata[2];
 
 	ormod = SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player));
 
@@ -1647,14 +1638,15 @@
 	y += 17;
 
 	// draw default waypoint graphics of ID 0
-	t = _track_depot_layout_table[4];
-	if(stat_id==0)
-	{
+	if (stat_id == 0) {
+		const byte *t = _track_depot_layout_table[4];
+		const DrawTrackSeqStruct *dtss;
+
 		img = *(const uint16*)t;
 		if (img & 0x8000) img = (img & 0x7FFF) + 0;
 		DrawSprite(img, x, y);
 
-		for(dtss = (const DrawTrackSeqStruct *)(t + sizeof(uint16)); dtss->image != 0; dtss++) {
+		for (dtss = (const DrawTrackSeqStruct *)(t + sizeof(uint16)); dtss->image != 0; dtss++) {
 			Point pt = RemapCoords(dtss->subcoord_x, dtss->subcoord_y, 0);
 			img = dtss->image;
 			if (img & 0x8000) img |= ormod;
@@ -1663,6 +1655,13 @@
 		return;
 	}
 
+	stat = GetCustomStation('WAYP', stat_id - 1);
+	assert(stat);
+	relocation = GetCustomStationRelocation(stat, NULL, 1);
+	// emulate station tile - open with building
+	// add 1 to get the other direction
+	cust = &stat->renderdata[2];
+
 	img = cust->ground_sprite;
 	if (img & 0x8000) img = (img & 0x7FFF);
 	DrawSprite(img, x, y);