diff options
| author | Arnaud Boutonné | 2010-12-17 23:12:36 +0000 | 
|---|---|---|
| committer | Arnaud Boutonné | 2010-12-17 23:12:36 +0000 | 
| commit | 222d2809e93fd774c44c78c23628a478ec68b7a1 (patch) | |
| tree | 5ab818ac3768129b024d03bd60db4f1a2c410158 | |
| parent | 7daea87e617198796220f5915b43fd27d57772e6 (diff) | |
| download | scummvm-rg350-222d2809e93fd774c44c78c23628a478ec68b7a1.tar.gz scummvm-rg350-222d2809e93fd774c44c78c23628a478ec68b7a1.tar.bz2 scummvm-rg350-222d2809e93fd774c44c78c23628a478ec68b7a1.zip | |
HUGO: little code cleanup
svn-id: r54948
| -rw-r--r-- | engines/hugo/game.h | 12 | ||||
| -rw-r--r-- | engines/hugo/schedule.cpp | 54 | ||||
| -rw-r--r-- | engines/hugo/schedule.h | 7 | ||||
| -rw-r--r-- | engines/hugo/schedule_v1d.cpp | 56 | ||||
| -rw-r--r-- | engines/hugo/schedule_v2d.cpp | 56 | 
5 files changed, 65 insertions, 120 deletions
| diff --git a/engines/hugo/game.h b/engines/hugo/game.h index 488f667bee..275f083d09 100644 --- a/engines/hugo/game.h +++ b/engines/hugo/game.h @@ -211,7 +211,7 @@ enum action_t {                                     // Parameters:  	START_OBJ,                                      //  1 - Object number  	INIT_OBJXY,                                     //  2 - Object number, x,y  	PROMPT,                                         //  3 - index of prompt & response string, ptrs to action -	// lists.  First if response matches, 2nd if not. +	                                                //      lists.  First if response matches, 2nd if not.  	BKGD_COLOR,                                     //  4 - new background color  	INIT_OBJVXY,                                    //  5 - Object number, vx, vy  	INIT_CARRY,                                     //  6 - Object number, carried status @@ -520,7 +520,7 @@ struct act30 {                                      // Type 30 - Start special m  };  struct act31 {                                      // Type 31 - Exit special maze processing -	action_t actType;                                   // The type of action +	action_t actType;                               // The type of action  	int      timer;                                 // Time to set off the action  }; @@ -638,17 +638,17 @@ struct act47 {                                      // Type 47 - Init viewx,view  };  struct act48 {                                      // Type 48 - Set curr_seq_p to frame n -	action_t actType;                                   // The type of action +	action_t actType;                               // The type of action  	int      timer;                                 // Time to set off the action  	int      objNumb;                               // The object number  	int      seqIndex;                              // The index of seq array to set to  	int      frameIndex;                            // The index of frame to set to  }; -struct act49 {                                      // Added by Strangerke - Type 79 - Play a sound (DOS way) -	action_t actType;                                   // The type of action +struct act49 {                                      // Added by Strangerke - Type 79 - Play a song (DOS way) +	action_t actType;                               // The type of action  	int      timer;                                 // Time to set off the action -	uint16   soundIndex;                            // Sound index in string array +	uint16   songIndex;                             // Song index in string array  };  union act { diff --git a/engines/hugo/schedule.cpp b/engines/hugo/schedule.cpp index 6ea7bfd273..6e4e4f5de3 100644 --- a/engines/hugo/schedule.cpp +++ b/engines/hugo/schedule.cpp @@ -537,7 +537,7 @@ void Scheduler::loadActListArr(Common::File &in) {  						break;  					case OLD_SONG:           //49  						_actListArr[i][j].a49.timer = in.readSint16BE(); -						_actListArr[i][j].a49.soundIndex = in.readUint16BE(); +						_actListArr[i][j].a49.songIndex = in.readUint16BE();  						break;  					default:  						error("Engine - Unknown action type encountered: %d", _actListArr[i][j].a0.actType); @@ -948,4 +948,56 @@ void Scheduler::restoreEvents(Common::SeekableReadStream *f) {  	}  } +/** +* Insert the action pointed to by p into the timer event queue +* The queue goes from head (earliest) to tail (latest) timewise +*/ +void Scheduler::insertAction(act *action) { +	debugC(1, kDebugSchedule, "insertAction() - Action type A%d", action->a0.actType); + +	// First, get and initialise the event structure +	event_t *curEvent = getQueue(); +	curEvent->action = action; +	switch (action->a0.actType) {                   // Assign whether local or global +	case AGSCHEDULE: +		curEvent->localActionFl = false;            // Lasts over a new screen +		break; +	default: +		curEvent->localActionFl = true;             // Rest are for current screen only +		break; +	} + +	curEvent->time = action->a0.timer + getTicks(); // Convert rel to abs time + +	// Now find the place to insert the event +	if (!_tailEvent) {                              // Empty queue +		_tailEvent = _headEvent = curEvent; +		curEvent->nextEvent = curEvent->prevEvent = 0; +	} else { +		event_t *wrkEvent = _tailEvent;             // Search from latest time back +		bool found = false; + +		while (wrkEvent && !found) { +			if (wrkEvent->time <= curEvent->time) { // Found if new event later +				found = true; +				if (wrkEvent == _tailEvent)         // New latest in list +					_tailEvent = curEvent; +				else +					wrkEvent->nextEvent->prevEvent = curEvent; +				curEvent->nextEvent = wrkEvent->nextEvent; +				wrkEvent->nextEvent = curEvent; +				curEvent->prevEvent = wrkEvent; +			} +			wrkEvent = wrkEvent->prevEvent; +		} + +		if (!found) {                               // Must be earliest in list +			_headEvent->prevEvent = curEvent;       // So insert as new head +			curEvent->nextEvent = _headEvent; +			curEvent->prevEvent = 0; +			_headEvent = curEvent; +		} +	} +} +  } // End of namespace Hugo diff --git a/engines/hugo/schedule.h b/engines/hugo/schedule.h index 32e988310e..436b6e7792 100644 --- a/engines/hugo/schedule.h +++ b/engines/hugo/schedule.h @@ -87,13 +87,13 @@ protected:  	virtual const char *getCypher() = 0;  	virtual event_t *doAction(event_t *curEvent) = 0;  	virtual void delQueue(event_t *curEvent) = 0; -	virtual void insertAction(act *action) = 0;  	event_t *getQueue();  	uint32 getDosTicks(bool updateFl);  	uint32 getWinTicks(); +	void insertAction(act *action);  };  class Scheduler_v1d : public Scheduler { @@ -102,11 +102,9 @@ public:  	~Scheduler_v1d();  	virtual const char *getCypher(); -  	virtual uint32 getTicks(); - -	virtual void insertAction(act *action);  	virtual void runScheduler(); +  protected:  	virtual void delQueue(event_t *curEvent);  	virtual event_t *doAction(event_t *curEvent); @@ -118,7 +116,6 @@ public:  	virtual ~Scheduler_v2d();  	virtual const char *getCypher(); -	void insertAction(act *action);  protected:  	void delQueue(event_t *curEvent);  	event_t *doAction(event_t *curEvent); diff --git a/engines/hugo/schedule_v1d.cpp b/engines/hugo/schedule_v1d.cpp index 9098137662..e224c8acd0 100644 --- a/engines/hugo/schedule_v1d.cpp +++ b/engines/hugo/schedule_v1d.cpp @@ -247,12 +247,6 @@ event_t *Scheduler_v1d::doAction(event_t *curEvent) {  		else  			insertActionList(action->a25.actFailIndex);  		break; -//	case SOUND:                                     // act26: Play a sound (or tune) -//		if (action->a26.soundIndex < _vm->_tunesNbr) -//			_vm->_sound->playMusic(action->a26.soundIndex); -//		else -//			_vm->_sound->playSound(action->a26.soundIndex, BOTH_CHANNELS, MED_PRI); -//		break;  	case ADD_SCORE:                                 // act27: Add object's value to score  		_vm->adjustScore(_vm->_object->_objects[action->a27.objNumb].objValue);  		break; @@ -266,10 +260,10 @@ event_t *Scheduler_v1d::doAction(event_t *curEvent) {  			insertActionList(action->a29.actFailIndex);  		break;  	case OLD_SONG: -		//TODO For Hugo 1 and Hugo2 DOS: The songs were not stored in a DAT file, but directly as +		//TODO For DOS versions: The songs were not stored in a DAT file, but directly as  		//strings. the current play_music should be modified to use a strings instead of reading  		//the file, in those cases. This replaces, for those DOS versions, act26. -		warning("STUB: doAction(act49)"); +		warning("STUB: doAction(act49) %s", _vm->_textData[action->a49.songIndex]);  		break;  	default:  		error("An error has occurred: %s", "doAction"); @@ -286,52 +280,6 @@ event_t *Scheduler_v1d::doAction(event_t *curEvent) {  }  /** -* Insert the action pointed to by p into the timer event queue -* The queue goes from head (earliest) to tail (latest) timewise -*/ -void Scheduler_v1d::insertAction(act *action) { -	debugC(1, kDebugSchedule, "insertAction() - Action type A%d", action->a0.actType); - -	// First, get and initialise the event structure -	event_t *curEvent = getQueue(); -	curEvent->action = action; - -	curEvent->localActionFl = true;                 // Rest are for current screen only - -	curEvent->time = action->a0.timer + getTicks(); // Convert rel to abs time - -	// Now find the place to insert the event -	if (!_tailEvent) {                              // Empty queue -		_tailEvent = _headEvent = curEvent; -		curEvent->nextEvent = curEvent->prevEvent = 0; -	} else { -		event_t *wrkEvent = _tailEvent;             // Search from latest time back -		bool found = false; - -		while (wrkEvent && !found) { -			if (wrkEvent->time <= curEvent->time) { // Found if new event later -				found = true; -				if (wrkEvent == _tailEvent)         // New latest in list -					_tailEvent = curEvent; -				else -					wrkEvent->nextEvent->prevEvent = curEvent; -				curEvent->nextEvent = wrkEvent->nextEvent; -				wrkEvent->nextEvent = curEvent; -				curEvent->prevEvent = wrkEvent; -			} -			wrkEvent = wrkEvent->prevEvent; -		} - -		if (!found) {                               // Must be earliest in list -			_headEvent->prevEvent = curEvent;       // So insert as new head -			curEvent->nextEvent = _headEvent; -			curEvent->prevEvent = 0; -			_headEvent = curEvent; -		} -	} -} - -/**  * This is the scheduler which runs every tick.  It examines the event queue  * for any events whose time has come.  It dequeues these events and performs  * the action associated with the event, returning it to the free queue diff --git a/engines/hugo/schedule_v2d.cpp b/engines/hugo/schedule_v2d.cpp index 307d1ac46d..04302caf61 100644 --- a/engines/hugo/schedule_v2d.cpp +++ b/engines/hugo/schedule_v2d.cpp @@ -376,10 +376,10 @@ event_t *Scheduler_v2d::doAction(event_t *curEvent) {  			_vm->_object->_objects[action->a48.objNumb].currImagePtr = _vm->_object->_objects[action->a48.objNumb].currImagePtr->nextSeqPtr;  		break;  	case OLD_SONG: -		//TODO For Hugo 1 and Hugo2 DOS: The songs were not stored in a DAT file, but directly as +		//TODO For DOS versions: The songs were not stored in a DAT file, but directly as  		//strings. the current play_music should be modified to use a strings instead of reading  		//the file, in those cases. This replaces, for those DOS versions, act26. -		warning("STUB: doAction(act49)"); +		warning("STUB: doAction(act49) %s", _vm->_textData[action->a49.songIndex]);  		break;  	default:  		error("An error has occurred: %s", "doAction"); @@ -394,56 +394,4 @@ event_t *Scheduler_v2d::doAction(event_t *curEvent) {  		return wrkEvent;                            // Return next event ptr  	}  } - -/** -* Insert the action pointed to by p into the timer event queue -* The queue goes from head (earliest) to tail (latest) timewise -*/ -void Scheduler_v2d::insertAction(act *action) { -	debugC(1, kDebugSchedule, "insertAction() - Action type A%d", action->a0.actType); - -	// First, get and initialise the event structure -	event_t *curEvent = getQueue(); -	curEvent->action = action; -	switch (action->a0.actType) {                   // Assign whether local or global -	case AGSCHEDULE: -		curEvent->localActionFl = false;            // Lasts over a new screen -		break; -	default: -		curEvent->localActionFl = true;             // Rest are for current screen only -		break; -	} - -	curEvent->time = action->a0.timer + getTicks(); // Convert rel to abs time - -	// Now find the place to insert the event -	if (!_tailEvent) {                              // Empty queue -		_tailEvent = _headEvent = curEvent; -		curEvent->nextEvent = curEvent->prevEvent = 0; -	} else { -		event_t *wrkEvent = _tailEvent;             // Search from latest time back -		bool found = false; - -		while (wrkEvent && !found) { -			if (wrkEvent->time <= curEvent->time) { // Found if new event later -				found = true; -				if (wrkEvent == _tailEvent)         // New latest in list -					_tailEvent = curEvent; -				else -					wrkEvent->nextEvent->prevEvent = curEvent; -				curEvent->nextEvent = wrkEvent->nextEvent; -				wrkEvent->nextEvent = curEvent; -				curEvent->prevEvent = wrkEvent; -			} -			wrkEvent = wrkEvent->prevEvent; -		} - -		if (!found) {                               // Must be earliest in list -			_headEvent->prevEvent = curEvent;       // So insert as new head -			curEvent->nextEvent = _headEvent; -			curEvent->prevEvent = 0; -			_headEvent = curEvent; -		} -	} -}  } // End of namespace Hugo | 
