(svn r555) -newgrf: Preliminary support for action 0xE. Inhibit another GRF file by ID. It won't really work until we get stages support (pasky & octo).
This commit is contained in:
		
							
								
								
									
										24
									
								
								grfspecial.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								grfspecial.c
									
									
									
									
									
								
							@@ -1230,7 +1230,26 @@ static void GRFInhibit(byte *buf, int len)
 | 
			
		||||
	 *
 | 
			
		||||
	 * B num           Number of GRFIDs that follow
 | 
			
		||||
	 * D grfids        GRFIDs of the files to deactivate */
 | 
			
		||||
	/* TODO */
 | 
			
		||||
	/* XXX: Should we handle forward deactivations? */
 | 
			
		||||
	/* XXX: Even so will fully work only with stages support. */
 | 
			
		||||
 | 
			
		||||
	byte num;
 | 
			
		||||
	int i;
 | 
			
		||||
	
 | 
			
		||||
	check_length(len, 1, "GRFInhibit");
 | 
			
		||||
	num = grf_load_byte(&buf); len--;
 | 
			
		||||
	check_length(len, 4 * num, "GRFInhibit");
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < num; i++) {
 | 
			
		||||
		uint32 grfid = grf_load_dword(&buf);
 | 
			
		||||
		struct GRFFile *file = GetFileByGRFID(grfid);
 | 
			
		||||
 | 
			
		||||
		/* Unset activation flag */
 | 
			
		||||
		if (file != NULL) {
 | 
			
		||||
			grfmsg(GMS_NOTICE, "GRFInhibit: Deactivating file ``%s''", file->filename);
 | 
			
		||||
			file->flags &= 0xFFFE;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1322,7 +1341,8 @@ void DecodeSpecialSprite(int num, int spriteid)
 | 
			
		||||
 | 
			
		||||
	action = buf[0];
 | 
			
		||||
	if (action < NUM_ACTIONS) {
 | 
			
		||||
		handlers[action](buf, num);
 | 
			
		||||
		if (_cur_grffile->flags & 0x0001)
 | 
			
		||||
			handlers[action](buf, num);
 | 
			
		||||
	} else {
 | 
			
		||||
		grfmsg(GMS_WARN, "Unknown special sprite action %x, skipping.", action);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user