diff options
| -rw-r--r-- | engines/sci/gfx/resource/picfill.cpp (renamed from engines/sci/gfx/resource/sci_picfill.cpp) | 184 | ||||
| -rw-r--r-- | engines/sci/gfx/resource/res_font.cpp (renamed from engines/sci/gfx/resource/sci_font.cpp) | 0 | ||||
| -rw-r--r-- | engines/sci/gfx/resource/res_manager.cpp (renamed from engines/sci/gfx/resource/sci_resmgr.cpp) | 0 | ||||
| -rw-r--r-- | engines/sci/gfx/resource/res_pal.cpp (renamed from engines/sci/gfx/resource/sci_pal_1.cpp) | 0 | ||||
| -rw-r--r-- | engines/sci/gfx/resource/res_pic.cpp (renamed from engines/sci/gfx/resource/sci_pic_0.cpp) | 6 | ||||
| -rw-r--r-- | engines/sci/gfx/resource/res_view0.cpp (renamed from engines/sci/gfx/resource/sci_view_0.cpp) | 0 | ||||
| -rw-r--r-- | engines/sci/gfx/resource/res_view1.cpp (renamed from engines/sci/gfx/resource/sci_view_1.cpp) | 0 | ||||
| -rw-r--r-- | engines/sci/gfx/resource/sci_picfill_aux.cpp | 215 | ||||
| -rw-r--r-- | engines/sci/module.mk | 10 | 
9 files changed, 188 insertions, 227 deletions
| diff --git a/engines/sci/gfx/resource/sci_picfill.cpp b/engines/sci/gfx/resource/picfill.cpp index 73b2b83e7d..eb0e8b36c2 100644 --- a/engines/sci/gfx/resource/sci_picfill.cpp +++ b/engines/sci/gfx/resource/picfill.cpp @@ -25,19 +25,197 @@  #include "sci/gfx/gfx_resource.h" -namespace Sci { -  /* Generic pic filling code, to be included by sci_pic_0.c   *   *   * To use, define the following: + *    AUXBUF_FILL: Name of the exported floodfill function + *    AUXBUF_FILL_HELPER: Name of the helper function   *    FILL_FUNCTION: Name of the exported floodfill function - *    FILL_FUNCTION_RECURSIVE: Name of the helper function + *    FILL_FUNCTION_RECURSIVE: Name of the helper function    *   * Define DRAW_SCALED to support scaled drawing, or leave it out for faster   * processing.   *   */ +  +namespace Sci { + +#define CLIPMASK_HARD_BOUND 0x80 /* ensures that we don't re-fill filled stuff */ + +static void AUXBUF_FILL_HELPER(gfxr_pic_t *pic, int old_xl, int old_xr, int y, int dy, +	int clipmask, int control, int sci_titlebar_size) { +	int xl, xr; +	int oldytotal = y * 320; +#ifdef DRAW_SCALED +	unsigned const char fillmask = CLIPMASK_HARD_BOUND | 0x78; +#else +	unsigned const char fillmask = CLIPMASK_HARD_BOUND | 0x84; +#endif + +	do { +		int ytotal = oldytotal + (320 * dy); +		int xcont; +		int state; + +		y += dy; + +		if (y < sci_titlebar_size || y > 199) +			return; + +		xl = old_xl; +		if (!(pic->aux_map[ytotal + xl] & clipmask)) { // go left +			while (xl && !(pic->aux_map[ytotal + xl - 1] & clipmask)) +				--xl; +		} else // go right and look for the first valid spot +			while ((xl <= old_xr) && (pic->aux_map[ytotal + xl] & clipmask)) +				++xl; + +		if (xl > old_xr) // No fillable strip above the last one +			return; + +		if ((ytotal + xl) < 0) { +			fprintf(stderr, "AARGH-%d\n", __LINE__); +			BREAKPOINT(); +		} + +		xr = xl; +		while (xr < 320 && !(pic->aux_map[ytotal + xr] & clipmask)) { +			pic->aux_map[ytotal + xr] |= fillmask; +			++xr; +		} + +		if ((ytotal + xr) > 64000) { +			fprintf(stderr, "AARGH-%d\n", __LINE__); +			BREAKPOINT(); +		} + +		--xr; + +		if (xr < xl) +			return; + +		// Check whether we need to recurse on branches in the same direction +		if ((y > sci_titlebar_size && dy < 0) || (y < 199 && dy > 0)) { +			state = 0; +			xcont = xr + 1; +			while (xcont <= old_xr) { +				if (pic->aux_map[ytotal + xcont] & clipmask) +					state = 0; +				else if (!state) { // recurse +					state = 1; +					AUXBUF_FILL_HELPER(pic, xcont, old_xr, y - dy, dy, clipmask, control, sci_titlebar_size); +				} +				++xcont; +			} +		} + +		// Check whether we need to recurse on backward branches: +		// left +		if (xl < old_xl - 1) { +			state = 0; +			for (xcont = old_xl - 1; xcont >= xl; xcont--) { +				if (pic->aux_map[oldytotal + xcont] & clipmask) +					state = xcont; +				else if (state) { // recurse +					AUXBUF_FILL_HELPER(pic, xcont, state, y, -dy, clipmask, control, sci_titlebar_size); +					state = 0; +				} +			} +		} + +		// right +		if (xr > old_xr + 1) { +			state = 0; +			for (xcont = old_xr + 1; xcont <= xr; xcont++) { +				if (pic->aux_map[oldytotal + xcont] & clipmask) +					state = xcont; +				else if (state) { // recurse +					AUXBUF_FILL_HELPER(pic, state, xcont, y, -dy, clipmask, control, sci_titlebar_size); +					state = 0; +				} +			} +		} + +		if ((ytotal + xl) < 0) { +			fprintf(stderr, "AARGH-%d\n", __LINE__); +			BREAKPOINT() +		} +		if ((ytotal + xr + 1) > 64000) { +			fprintf(stderr, "AARGH-%d\n", __LINE__); +			BREAKPOINT(); +		} + +		if (control) +			memset(pic->control_map->index_data + ytotal + xl, control, xr - xl + 1); + +		oldytotal = ytotal; +		old_xr = xr; +		old_xl = xl; + +	} while (1); +} + + +static void AUXBUF_FILL(gfxr_pic_t *pic, int x, int y, int clipmask, int control, int sci_titlebar_size) { +	// Fills the aux buffer and the control map (if control != 0) +	int xl, xr; +	int ytotal = y * 320; +#ifdef DRAW_SCALED +	unsigned const char fillmask = 0x78; +#else +	unsigned const char fillmask = 0x4; +#endif + +#ifndef DRAW_SCALED +	if (!control || !(clipmask & 4)) +		return; // Without pic scaling, we only do this to fill the control map +#endif + +	if (clipmask & 1) +		clipmask = 1; // vis +	else if (clipmask & 2) +		clipmask = 2; // pri +	else if (clipmask & 4) +		clipmask = 4; // ctl +	else return; + +#ifdef DRAW_SCALED +	clipmask |= fillmask; // Bits 3-5 +#endif + +	if (pic->aux_map[ytotal + x] & clipmask) +		return; + +	pic->aux_map[ytotal + x] |= fillmask; + +	xl = x; +	while (xl && !(pic->aux_map[ytotal + xl - 1] & clipmask)) { +		--xl; +		pic->aux_map[ytotal + xl] |= fillmask; +	} + +	xr = x; +	while ((xr < 319) && !(pic->aux_map[ytotal + xr + 1] & clipmask)) { +		++xr; +		pic->aux_map[ytotal + xr] |= fillmask; +	} + +	clipmask |= CLIPMASK_HARD_BOUND; // Guarantee clipping + +	if (control) // Draw the same strip on the control map +		memset(pic->control_map->index_data + ytotal + xl, control, xr - xl + 1); + +	if (y > sci_titlebar_size) +		AUXBUF_FILL_HELPER(pic, xl, xr, y, -1, clipmask, control, sci_titlebar_size); + +	if (y < 199) +		AUXBUF_FILL_HELPER(pic, xl, xr, y, + 1, clipmask, control, sci_titlebar_size); +} + + +#undef CLIPMASK_HARD_BOUND +  #ifdef FILL_RECURSIVE_DEBUG  #  define PRINT_DEBUG0(s) if (!fillmagc) fprintf(stderr, s) diff --git a/engines/sci/gfx/resource/sci_font.cpp b/engines/sci/gfx/resource/res_font.cpp index c208fe16f0..c208fe16f0 100644 --- a/engines/sci/gfx/resource/sci_font.cpp +++ b/engines/sci/gfx/resource/res_font.cpp diff --git a/engines/sci/gfx/resource/sci_resmgr.cpp b/engines/sci/gfx/resource/res_manager.cpp index c3646eb6b4..c3646eb6b4 100644 --- a/engines/sci/gfx/resource/sci_resmgr.cpp +++ b/engines/sci/gfx/resource/res_manager.cpp diff --git a/engines/sci/gfx/resource/sci_pal_1.cpp b/engines/sci/gfx/resource/res_pal.cpp index 74fb8629b7..74fb8629b7 100644 --- a/engines/sci/gfx/resource/sci_pal_1.cpp +++ b/engines/sci/gfx/resource/res_pal.cpp diff --git a/engines/sci/gfx/resource/sci_pic_0.cpp b/engines/sci/gfx/resource/res_pic.cpp index b91ad8ff05..6e51ce9ac7 100644 --- a/engines/sci/gfx/resource/sci_pic_0.cpp +++ b/engines/sci/gfx/resource/res_pic.cpp @@ -1140,8 +1140,7 @@ static inline int _gfxr_find_fill_point(gfxr_pic_t *pic, int min_x, int min_y, i  #define AUXBUF_FILL_HELPER _gfxr_auxbuf_fill_any_recursive  #define AUXBUF_FILL _gfxr_auxbuf_fill_any  #define DRAW_SCALED -# include "sci_picfill_aux.cpp" -# include "sci_picfill.cpp" +# include "picfill.cpp"  #undef DRAW_SCALED  #undef AUXBUF_FILL  #undef AUXBUF_FILL_HELPER @@ -1159,8 +1158,7 @@ namespace Sci {  #define FILL_FUNCTION_RECURSIVE _gfxr_fill_1_recursive  #define AUXBUF_FILL_HELPER _gfxr_auxbuf_fill_1_recursive  #define AUXBUF_FILL _gfxr_auxbuf_fill_1 -# include "sci_picfill_aux.cpp" -# include "sci_picfill.cpp" +# include "picfill.cpp"  #undef AUXBUF_FILL  #undef AUXBUF_FILL_HELPER  #undef FILL_FUNCTION_RECURSIVE diff --git a/engines/sci/gfx/resource/sci_view_0.cpp b/engines/sci/gfx/resource/res_view0.cpp index 6a0ca140c4..6a0ca140c4 100644 --- a/engines/sci/gfx/resource/sci_view_0.cpp +++ b/engines/sci/gfx/resource/res_view0.cpp diff --git a/engines/sci/gfx/resource/sci_view_1.cpp b/engines/sci/gfx/resource/res_view1.cpp index 937264d84c..937264d84c 100644 --- a/engines/sci/gfx/resource/sci_view_1.cpp +++ b/engines/sci/gfx/resource/res_view1.cpp diff --git a/engines/sci/gfx/resource/sci_picfill_aux.cpp b/engines/sci/gfx/resource/sci_picfill_aux.cpp deleted file mode 100644 index 98fd5bbb2a..0000000000 --- a/engines/sci/gfx/resource/sci_picfill_aux.cpp +++ /dev/null @@ -1,215 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -/* Generic pic auxbuf filling code, to be included by sci_pic_0.c - * - * - * To use, define the following: - *    AUXBUF_FILL: Name of the exported floodfill function - *    AUXBUF_FILL_HELPER: Name of the helper function - * - * Define DRAW_SCALED to support scaled drawing, or leave it out for faster - * processing. - * - */ - -namespace Sci { - -#define CLIPMASK_HARD_BOUND 0x80 /* ensures that we don't re-fill filled stuff */ - -static void AUXBUF_FILL_HELPER(gfxr_pic_t *pic, int old_xl, int old_xr, int y, int dy, -	int clipmask, int control, int sci_titlebar_size) { -	int xl, xr; -	int oldytotal = y * 320; -#ifdef DRAW_SCALED -	unsigned const char fillmask = CLIPMASK_HARD_BOUND | 0x78; -#else -	unsigned const char fillmask = CLIPMASK_HARD_BOUND | 0x84; -#endif - -	do { -		int ytotal = oldytotal + (320 * dy); -		int xcont; -		int state; - -		y += dy; - -		if (y < sci_titlebar_size || y > 199) -			return; - -		xl = old_xl; -		if (!(pic->aux_map[ytotal + xl] & clipmask)) { // go left -			while (xl && !(pic->aux_map[ytotal + xl - 1] & clipmask)) -				--xl; -		} else // go right and look for the first valid spot -			while ((xl <= old_xr) && (pic->aux_map[ytotal + xl] & clipmask)) -				++xl; - -		if (xl > old_xr) // No fillable strip above the last one -			return; - -		if ((ytotal + xl) < 0) { -			fprintf(stderr, "AARGH-%d\n", __LINE__); -			BREAKPOINT(); -		} - -		xr = xl; -		while (xr < 320 && !(pic->aux_map[ytotal + xr] & clipmask)) { -			pic->aux_map[ytotal + xr] |= fillmask; -			++xr; -		} - -		if ((ytotal + xr) > 64000) { -			fprintf(stderr, "AARGH-%d\n", __LINE__); -			BREAKPOINT(); -		} - -		--xr; - -		if (xr < xl) -			return; - -		// Check whether we need to recurse on branches in the same direction -		if ((y > sci_titlebar_size && dy < 0) || (y < 199 && dy > 0)) { -			state = 0; -			xcont = xr + 1; -			while (xcont <= old_xr) { -				if (pic->aux_map[ytotal + xcont] & clipmask) -					state = 0; -				else if (!state) { // recurse -					state = 1; -					AUXBUF_FILL_HELPER(pic, xcont, old_xr, y - dy, dy, clipmask, control, sci_titlebar_size); -				} -				++xcont; -			} -		} - -		// Check whether we need to recurse on backward branches: -		// left -		if (xl < old_xl - 1) { -			state = 0; -			for (xcont = old_xl - 1; xcont >= xl; xcont--) { -				if (pic->aux_map[oldytotal + xcont] & clipmask) -					state = xcont; -				else if (state) { // recurse -					AUXBUF_FILL_HELPER(pic, xcont, state, y, -dy, clipmask, control, sci_titlebar_size); -					state = 0; -				} -			} -		} - -		// right -		if (xr > old_xr + 1) { -			state = 0; -			for (xcont = old_xr + 1; xcont <= xr; xcont++) { -				if (pic->aux_map[oldytotal + xcont] & clipmask) -					state = xcont; -				else if (state) { // recurse -					AUXBUF_FILL_HELPER(pic, state, xcont, y, -dy, clipmask, control, sci_titlebar_size); -					state = 0; -				} -			} -		} - -		if ((ytotal + xl) < 0) { -			fprintf(stderr, "AARGH-%d\n", __LINE__); -			BREAKPOINT() -		} -		if ((ytotal + xr + 1) > 64000) { -			fprintf(stderr, "AARGH-%d\n", __LINE__); -			BREAKPOINT(); -		} - -		if (control) -			memset(pic->control_map->index_data + ytotal + xl, control, xr - xl + 1); - -		oldytotal = ytotal; -		old_xr = xr; -		old_xl = xl; - -	} while (1); -} - - -static void AUXBUF_FILL(gfxr_pic_t *pic, int x, int y, int clipmask, int control, int sci_titlebar_size) { -	// Fills the aux buffer and the control map (if control != 0) -	int xl, xr; -	int ytotal = y * 320; -#ifdef DRAW_SCALED -	unsigned const char fillmask = 0x78; -#else -	unsigned const char fillmask = 0x4; -#endif - -#ifndef DRAW_SCALED -	if (!control || !(clipmask & 4)) -		return; // Without pic scaling, we only do this to fill the control map -#endif - -	if (clipmask & 1) -		clipmask = 1; // vis -	else if (clipmask & 2) -		clipmask = 2; // pri -	else if (clipmask & 4) -		clipmask = 4; // ctl -	else return; - -#ifdef DRAW_SCALED -	clipmask |= fillmask; // Bits 3-5 -#endif - -	if (pic->aux_map[ytotal + x] & clipmask) -		return; - -	pic->aux_map[ytotal + x] |= fillmask; - -	xl = x; -	while (xl && !(pic->aux_map[ytotal + xl - 1] & clipmask)) { -		--xl; -		pic->aux_map[ytotal + xl] |= fillmask; -	} - -	xr = x; -	while ((xr < 319) && !(pic->aux_map[ytotal + xr + 1] & clipmask)) { -		++xr; -		pic->aux_map[ytotal + xr] |= fillmask; -	} - -	clipmask |= CLIPMASK_HARD_BOUND; // Guarantee clipping - -	if (control) // Draw the same strip on the control map -		memset(pic->control_map->index_data + ytotal + xl, control, xr - xl + 1); - -	if (y > sci_titlebar_size) -		AUXBUF_FILL_HELPER(pic, xl, xr, y, -1, clipmask, control, sci_titlebar_size); - -	if (y < 199) -		AUXBUF_FILL_HELPER(pic, xl, xr, y, + 1, clipmask, control, sci_titlebar_size); -} - - -#undef CLIPMASK_HARD_BOUND - -} // End of namespace Sci diff --git a/engines/sci/module.mk b/engines/sci/module.mk index df2d9a0697..c96ba97c62 100644 --- a/engines/sci/module.mk +++ b/engines/sci/module.mk @@ -48,11 +48,11 @@ MODULE_OBJS = \  	gfx/sbtree.o \  	gfx/sci_widgets.o \  	gfx/resource/sci_font.o \ -	gfx/resource/sci_pal_1.o \ -	gfx/resource/sci_pic_0.o \ -	gfx/resource/sci_resmgr.o \ -	gfx/resource/sci_view_0.o \ -	gfx/resource/sci_view_1.o \ +	gfx/resource/res_pal.o \ +	gfx/resource/res_pic.o \ +	gfx/resource/res_manager.o \ +	gfx/resource/res_view0.o \ +	gfx/resource/res_view1.o \  	scicore/sciconsole.o \  	scicore/decompress0.o \  	scicore/decompress01.o \ | 
