Beispiel #1
0
Mouse::Mouse(CGEEngine *vm) : Sprite(vm, NULL), _busy(NULL), _hold(NULL), _hx(0), _vm(vm) {
	_hold = NULL;
	_hx = 0;
	_hy = 0;
	_exist = true;
	_buttons = 0;
	_busy = NULL;
	_active = false;
	_flags._kill = false;

	const Seq ms[] = {
		{ 0, 0, 0, 0, 1 },
		{ 1, 1, 0, 0, 1 }
	};
	Seq *seq = (Seq *)malloc(2 * sizeof(Seq));
	Common::copy(ms, ms + 2, seq);
	setSeq(seq);

	BitmapPtr *MC = new BitmapPtr[3];
	MC[0] = new Bitmap(_vm, "MOUSE");
	MC[1] = new Bitmap(_vm, "DUMMY");
	MC[2] = NULL;
	setShapeList(MC);

	gotoxy(kScrWidth / 2, kScrHeight / 2);
	_z = 127;
	step(1);
}
Beispiel #2
0
SceneLight::SceneLight(CGEEngine *vm): Sprite(vm, NULL) {
	// Set the sprite list
	BitmapPtr *PR = new BitmapPtr[2];
	PR[0] = new Bitmap("PRESS");
	PR[1] = NULL;

	setShapeList(PR);
}
Beispiel #3
0
HorizLine::HorizLine(CGEEngine *vm): Sprite(vm, NULL) {
	// Set the sprite list
	BitmapPtr *HL = new BitmapPtr[2];
	HL[0] = new Bitmap("HLINE");
	HL[1] = NULL;

	setShapeList(HL);
}
Beispiel #4
0
Square::Square(CGEEngine *vm) : Sprite(vm, NULL), _vm(vm) {
	_flags._kill = true;
	_flags._bDel = false;

	BitmapPtr *MB = new BitmapPtr[2];
	MB[0] = new Bitmap(_vm, "BRICK");
	MB[1] = NULL;
	setShapeList(MB);
}
Beispiel #5
0
Spike::Spike(CGEEngine *vm): Sprite(vm, NULL) {
	// Set the sprite list
	BitmapPtr *SP = new BitmapPtr[3];
	SP[0] = new Bitmap("SPK_L");
	SP[1] = new Bitmap("SPK_R");
	SP[2] = NULL;

	setShapeList(SP);
}
Beispiel #6
0
PocLight::PocLight(CGEEngine *vm): Sprite(vm, NULL) {
	// Set the sprite list
	BitmapPtr *LI = new BitmapPtr[5];
	LI[0] = new Bitmap("LITE0");
	LI[1] = new Bitmap("LITE1");
	LI[2] = new Bitmap("LITE2");
	LI[3] = new Bitmap("LITE3");
	LI[4] = NULL;

	setShapeList(LI);

	_flags._kill = false;
}
Beispiel #7
0
Sprite::Sprite(CGEEngine *vm, BitmapPtr *shpP)
	: _x(0), _y(0), _z(0), _nearPtr(0), _takePtr(0),
	  _next(NULL), _prev(NULL), _seqPtr(kNoSeq), _time(0),
	  _ext(NULL), _ref(-1), _scene(0), _vm(vm) {
	memset(_file, 0, sizeof(_file));
	memset(&_flags, 0, sizeof(_flags));
	_ref = 0;
	_x = _y = 0;
	_w = _h = 0;
	_time = 0;
	_seqPtr = 0;
	_shpCnt = 0;
	_prev = _next = NULL;

	setShapeList(shpP);
}
Beispiel #8
0
Mouse::Mouse(CGE2Engine *vm) : Sprite(vm), _busy(nullptr), _hold(nullptr), _hx(0), _point(vm), _vm(vm) {
	_hold = nullptr;
	_hx = 0;
	_hy = 0;
	_exist = true;
	_buttons = 0;
	_busy = nullptr;
	_active = false;
	_flags._kill = false;

	setSeq(_stdSeq8);

	BitmapPtr MC = new Bitmap[2];
	MC[0] = Bitmap(_vm, "MOUSE");
	MC[1] = Bitmap(_vm, "DUMMY");
	setShapeList(MC, 2);

	step(1);
	on();
	off();
}
Beispiel #9
0
Sprite *Sprite::expand() {
	if (_ext)
		return this;

	_ext = new SprExt;
	assert(_ext != NULL);
	if (!*_file)
		return this;

	static const char *Comd[] = { "Name", "Phase", "Seq", "Near", "Take", NULL };
	char fname[kPathMax];

	Common::Array<BitmapPtr> shplist;
	for (int i = 0; i < _shpCnt + 1; ++i)
		shplist.push_back(NULL);

	Seq *seq = NULL;
	int shapeCount = 0,
	    seqCount = 0,
	    nearCount = 0,
	    takeCount = 0,
	    maxnow = 0,
	    maxnxt = 0;

	Snail::Com *nearList = NULL;
	Snail::Com *takeList = NULL;
	_vm->mergeExt(fname, _file, kSprExt);
	if (_resman->exist(fname)) { // sprite description file exist
		EncryptedStream sprf(fname);
		if (sprf.err())
			error("Bad SPR [%s]", fname);
		Common::String line;
		char tmpStr[kLineMax + 1];
		int len = 0, lcnt = 0;

		for (line = sprf.readLine(); !sprf.eos(); line = sprf.readLine()) {
			len = line.size();
			strcpy(tmpStr, line.c_str());
			lcnt++;
			if (len == 0 || *tmpStr == '.')
				continue;

			Snail::Com *c;
			switch (_vm->takeEnum(Comd, strtok(tmpStr, " =\t"))) {
			case 0:
				// Name
				setName(strtok(NULL, ""));
				break;
			case 1:
				// Phase
				// In case the shape index gets too high, increase the array size
				while ((shapeCount + 1) >= (int)shplist.size()) {
					shplist.push_back(NULL);
					++_shpCnt;
				}
				shplist[shapeCount++] = new Bitmap(strtok(NULL, " \t,;/"));
				break;
			case 2:
				// Seq
				seq = (Seq *)realloc(seq, (seqCount + 1) * sizeof(*seq));
				assert(seq != NULL);
				Seq *s;
				s = &seq[seqCount++];
				s->_now = atoi(strtok(NULL, " \t,;/"));
				if (s->_now > maxnow)
					maxnow = s->_now;
				s->_next = atoi(strtok(NULL, " \t,;/"));
				switch (s->_next) {
				case 0xFF:
					s->_next = seqCount;
					break;
				case 0xFE:
					s->_next = seqCount - 1;
					break;
				}
				if (s->_next > maxnxt)
					maxnxt = s->_next;
				s->_dx = atoi(strtok(NULL, " \t,;/"));
				s->_dy = atoi(strtok(NULL, " \t,;/"));
				s->_dly = atoi(strtok(NULL, " \t,;/"));
				break;
			case 3:
				// Near
				if (_nearPtr == kNoPtr)
					break;
				nearList = (Snail::Com *)realloc(nearList, (nearCount + 1) * sizeof(*nearList));
				assert(nearList != NULL);
				c = &nearList[nearCount++];
				if ((c->_com = (SnCom)_vm->takeEnum(Snail::_comText, strtok(NULL, " \t,;/"))) < 0)
					error("Bad NEAR in %d [%s]", lcnt, fname);
				c->_ref = atoi(strtok(NULL, " \t,;/"));
				c->_val = atoi(strtok(NULL, " \t,;/"));
				c->_ptr = NULL;
			break;
			case 4:
				// Take
				if (_takePtr == kNoPtr)
					break;
				takeList = (Snail::Com *)realloc(takeList, (takeCount + 1) * sizeof(*takeList));
				assert(takeList != NULL);
				c = &takeList[takeCount++];
				if ((c->_com = (SnCom)_vm->takeEnum(Snail::_comText, strtok(NULL, " \t,;/"))) < 0)
					error("Bad NEAR in %d [%s]", lcnt, fname);
				c->_ref = atoi(strtok(NULL, " \t,;/"));
				c->_val = atoi(strtok(NULL, " \t,;/"));
				c->_ptr = NULL;
				break;
			}
		}
	} else {
		// no sprite description: try to read immediately from .BMP
		shplist[shapeCount++] = new Bitmap(_file);
	}

	shplist[shapeCount] = NULL;
	if (seq) {
		if (maxnow >= shapeCount)
			error("Bad PHASE in SEQ [%s]", fname);
		if (maxnxt >= seqCount)
			error("Bad JUMP in SEQ [%s]", fname);
		setSeq(seq);
	} else
		setSeq(getConstantSeq(_shpCnt == 1));

	// Set the shape list
	BitmapPtr *shapeList = new BitmapPtr[shplist.size()];
	for (uint i = 0; i < shplist.size(); ++i)
		shapeList[i] = shplist[i];

	setShapeList(shapeList);

	if (nearList)
		nearList[nearCount - 1]._ptr = _ext->_near = nearList;
	else
		_nearPtr = kNoPtr;
	if (takeList)
		takeList[takeCount - 1]._ptr = _ext->_take = takeList;
	else
		_takePtr = kNoPtr;

	return this;
}