diff options
| -rw-r--r-- | engines/cryo/defs.h | 39 | ||||
| -rw-r--r-- | engines/cryo/eden.cpp | 165 | ||||
| -rw-r--r-- | engines/cryo/eden.h | 3 | 
3 files changed, 104 insertions, 103 deletions
diff --git a/engines/cryo/defs.h b/engines/cryo/defs.h index aa7e6c7d92..72e535cd92 100644 --- a/engines/cryo/defs.h +++ b/engines/cryo/defs.h @@ -29,22 +29,11 @@ namespace Cryo {  #define getElem(array, idx) \  	( (char *)(array) + READ_LE_UINT16((idx) * 2 + (char *)(array)) ) -/* -static inline void* AGetElem(byte *arr, int16 index) -{ -    byte *p = arr + num * 2; -    byte o0 = *p++; -    byte o1 = *p++; -    uint16 ofs = (o1 << 8) | o0; -    return arr + ofs; -} -*/  ///////////////// Game defs  #define FONT_HEIGHT 9 -  /*  Glossary    room      - a single game world's screen. referenced by 16-bit number 0xAALL, where AA - area# and LL - location# @@ -184,13 +173,13 @@ enum Objects {  enum PERSO {  	PER_KING = 0,  	PER_DINA,       // 0x12 -	PER_THOO,       // 0x24 +	PER_TAU,        // 0x24  	PER_MONK,       // 0x36 -	PER_TORMENTOR,   // 0x48 -	PER_MESSENGER,   // 0x5A -	PER_MANGO,      // 0x6C +	PER_JABBER,     // 0x48 +	PER_ELOI,       // 0x5A +	PER_MUNGO,      // 0x6C  	PER_EVE,        // 0x7E -	PER_AZIA,       // 0x90 +	PER_SHAZIA,     // 0x90  	PER_MAMMI,      // 0xA2  	PER_MAMMI_1,    // 0xB4  	PER_MAMMI_2,    // 0xC6 @@ -321,22 +310,22 @@ struct perso_t {  	uint16  _roomNum;    // room this person currently in  	uint16  _actionId;   // TODO: checkme  	uint16  _partyMask;      // party bit mask -	byte   _id;         // character -	byte   _flags;      // flags and kind -	byte   _roomBankId;// index in kPersoRoomBankTable for specific room banks -	byte   _spriteBank;       // sprite bank +	byte    _id;         // character +	byte    _flags;      // flags and kind +	byte    _roomBankId;// index in kPersoRoomBankTable for specific room banks +	byte    _spriteBank;       // sprite bank  	uint16  _items;      // inventory  	uint16  _powers;     // obj of power bitmask -	byte   _targetLoc;  // For party member this is mini sprite index -	byte   _lastLoc;    // For party member this is mini sprite x offset -	byte   _speed;      // num ticks per step -	byte   _steps;      // current ticks +	byte    _targetLoc;  // For party member this is mini sprite index +	byte    _lastLoc;    // For party member this is mini sprite x offset +	byte    _speed;      // num ticks per step +	byte    _steps;      // current ticks  };  class EdenGame;  struct phase_t { -	int16           _id; +	int16 _id;  	void (EdenGame::*disp)();  }; diff --git a/engines/cryo/eden.cpp b/engines/cryo/eden.cpp index 8ccd5accca..6262fd61d4 100644 --- a/engines/cryo/eden.cpp +++ b/engines/cryo/eden.cpp @@ -359,7 +359,7 @@ void EdenGame::flipMode() {  	if (_personTalking) {  		endCharacterSpeech();  		if (_globals->_displayFlags == DisplayFlags::dfPerson) { -			if (_globals->_characterPtr == &kPersons[PER_THOO] && _globals->_phaseNum >= 80) +			if (_globals->_characterPtr == &kPersons[PER_TAU] && _globals->_phaseNum >= 80)  				displaySubtitles();  			else {  				getDataSync(); @@ -507,7 +507,7 @@ void EdenGame::deplaval(uint16 roomNum) {  	if (c1 == 0xFF) {  		_globals->_eventType = EventType::etEventE;  		showEvents(); -		if (!kPersons[PER_MESSENGER]._roomNum && checkEloiReturn()) +		if (!kPersons[PER_ELOI]._roomNum && checkEloiReturn())  			setChrono(800);  		return;  	} @@ -2688,9 +2688,9 @@ void EdenGame::displayNoFollower(int16 bank) {  void EdenGame::displayCharacterBackground1() {  	byte bank;  	char *ptab; -	if (_globals->_characterPtr == &kPersons[PER_MESSENGER]) { +	if (_globals->_characterPtr == &kPersons[PER_ELOI]) {  		_gameIcons[0].sx = 0; -		_characterRects[PER_MESSENGER].left = 2; +		_characterRects[PER_ELOI].left = 2;  		bank = _globals->_characterBackgroundBankIdx;  		if (_globals->_eventType == EventType::etEventE) {  			_globals->_var103 = 1; @@ -2698,9 +2698,9 @@ void EdenGame::displayCharacterBackground1() {  			return;  		}  		_gameIcons[0].sx = 60; -		_characterRects[PER_MESSENGER].left = 62; +		_characterRects[PER_ELOI].left = 62;  	} -	if (_globals->_characterPtr == &kPersons[PER_THOO]) { +	if (_globals->_characterPtr == &kPersons[PER_TAU]) {  		bank = 37;  		if (_globals->_curObjectId == Objects::obShell) {  			displayNoFollower(bank); @@ -2739,7 +2739,7 @@ void EdenGame::setCharacterIcon() {  	if (_globals->_iconsIndex == 4)  		return; -	if (_globals->_characterPtr == &kPersons[PER_MESSENGER] && _globals->_eventType == EventType::etEventE) { +	if (_globals->_characterPtr == &kPersons[PER_ELOI] && _globals->_eventType == EventType::etEventE) {  		_globals->_iconsIndex = 123;  		return;  	} @@ -2764,7 +2764,7 @@ void EdenGame::showCharacter() {  			loadCharacter(perso);  			setCharacterIcon();  			displayCharacterBackground(); -			if (perso == &kPersons[PER_THOO] && _globals->_curObjectId == Objects::obShell) { +			if (perso == &kPersons[PER_TAU] && _globals->_curObjectId == Objects::obShell) {  				displaySubtitles();  				updateCursor();  				_paletteUpdateRequired = true; @@ -3255,7 +3255,7 @@ void EdenGame::parle_moi() {  		if (!ok) {  			parlemoiNormalFlag = true;  			if (_globals->_var60) { -				if (_globals->_characterPtr == &kPersons[PER_MESSENGER]) { +				if (_globals->_characterPtr == &kPersons[PER_ELOI]) {  					_globals->_dialogType = DialogType::dtTalk;  					if (_globals->_eloiHaveNews)  						parlemoi_normal(); @@ -3284,7 +3284,7 @@ void EdenGame::initCharacterPointers(perso_t *perso) {  void EdenGame::perso1(perso_t *perso) {  	_globals->_phaseActionsCount++; -	if (perso == &kPersons[PER_THOO]) +	if (perso == &kPersons[PER_TAU])  		_globals->_phaseActionsCount--;  	_globals->_characterPtr = perso;  	initCharacterPointers(perso); @@ -3324,7 +3324,7 @@ void EdenGame::actionDina() {  // Original name: thoo  void EdenGame::actionThoo() { -	perso_normal(&kPersons[PER_THOO]); +	perso_normal(&kPersons[PER_TAU]);  }  // Original name: monk @@ -3334,17 +3334,17 @@ void EdenGame::actionMonk() {  // Original name: bourreau  void EdenGame::actionTormentor() { -	perso_normal(&kPersons[PER_TORMENTOR]); +	perso_normal(&kPersons[PER_JABBER]);  }  // Original name: messager  void EdenGame::actionMessenger() { -	perso_normal(&kPersons[PER_MESSENGER]); +	perso_normal(&kPersons[PER_ELOI]);  }  // Original name: mango  void EdenGame::actionMango()    { -	perso_normal(&kPersons[PER_MANGO]); +	perso_normal(&kPersons[PER_MUNGO]);  }  // Original name: eve @@ -3354,7 +3354,7 @@ void EdenGame::actionEve()  {  // Original name: azia  void EdenGame::actionAzia() { -	perso_normal(&kPersons[PER_AZIA]); +	perso_normal(&kPersons[PER_SHAZIA]);  }  // Original name: mammi @@ -3411,7 +3411,7 @@ void EdenGame::actionDino() {  		waitEndSpeak();  	if (_vm->shouldQuit())  		return; -	perso = &kPersons[PER_MANGO]; +	perso = &kPersons[PER_MUNGO];  	if (!(_globals->_party & PersonMask::pmMungo)) {  		perso = &kPersons[PER_DINA];  		if (!(_globals->_party & PersonMask::pmDina)) { @@ -3442,7 +3442,7 @@ void EdenGame::actionTyran() {  	_globals->_roomCharacterFlags = perso->_flags;  	_globals->_characterPtr = perso;  	initCharacterPointers(perso); -	perso = &kPersons[PER_MANGO]; +	perso = &kPersons[PER_MUNGO];  	if (!(_globals->_party & PersonMask::pmMungo)) {  		perso = &kPersons[PER_DINA];  		if (!(_globals->_party & PersonMask::pmDina)) { @@ -3492,14 +3492,14 @@ void EdenGame::actionAdam() {  			_globals->_var100 = 0xFF;  			quitMirror();  			updateRoom(_globals->_roomNum); -			removeFromParty(PER_MESSENGER); +			removeFromParty(PER_ELOI);  			_globals->_eventType = EventType::etEvent3;  			showEvents();  			waitEndSpeak();  			if (_vm->shouldQuit())  				return;  			closeCharacterScreen(); -			removeFromParty(PER_MESSENGER); +			removeFromParty(PER_ELOI);  			_globals->_roomNum = 2818;  			_globals->_areaNum = Areas::arWhiteArch;  			_globals->_eventType = EventType::etEvent5; @@ -3514,7 +3514,7 @@ void EdenGame::actionAdam() {  		break;  	case Objects::obShell:  		_globals->_dialogType = DialogType::dtHint; -		perso1(&kPersons[PER_THOO]); +		perso1(&kPersons[PER_TAU]);  		break;  	case Objects::obFlute:  	case Objects::obTrumpet: @@ -3814,13 +3814,25 @@ void EdenGame::abortDialogue() {  	placeVava(_globals->_areaPtr);  } +void EdenGame::subHandleNarrator() { +	_globals->_varF2 &= ~1;  //TODO: check me +	if (_globals->_narratorSequence > 50 && _globals->_narratorSequence <= 80) +		_globals->_endGameFlag = 50; +	if (_globals->_narratorSequence == 3) +		setChrono(1200); +	_globals->_narratorSequence = 0; +} +  // Original name: narrateur  void EdenGame::handleNarrator() {  	if (!(_globals->_displayFlags & DisplayFlags::dfFlag1))  		return;  	if (!_globals->_narratorSequence) { -		if (_globals->_var6A == _globals->_var69) -			goto skip; +		if (_globals->_var6A == _globals->_var69) { +			subHandleNarrator(); +			return; +		} +  		narratorBuildCitadel();  	}  	_globals->_varF5 |= 0x80; @@ -3854,26 +3866,19 @@ void EdenGame::handleNarrator() {  	}  	_globals->_var103 = 0;  	if (_globals->_narratorSequence == 10) { -		addToParty(PER_MESSENGER); +		addToParty(PER_ELOI);  		addToParty(PER_EVE);  		addToParty(PER_MONK);  		addToParty(PER_GUARDS); -		removeFromParty(PER_MANGO); +		removeFromParty(PER_MUNGO);  		_globals->_eloiHaveNews = 0;  		deplaval(139);  	}  	_globals->_eventType = EventType::etEventD;  	showEvents();  	_globals->_varF5 &= ~0x80; -skip: -	; -	_globals->_varF2 &= ~1;  //TODO: check me -	if (_globals->_narratorSequence > 50 && _globals->_narratorSequence <= 80) -		_globals->_endGameFlag = 50; -	if (_globals->_narratorSequence == 3) -		setChrono(1200); -	_globals->_narratorSequence = 0; +	subHandleNarrator();  }  // Original name: vrf_phrases_file @@ -3980,7 +3985,8 @@ bool EdenGame::dial_scan(dial_t *dial) {  	vavapers();  	_globals->_sentenceBufferPtr = _sentenceBuffer;  	byte hidx, lidx; -	uint16 mask; +	uint16 mask = 0; +	bool skipFl = false;  	for (;; _globals->_dialogPtr++) {  		for (;; _globals->_dialogPtr++) {  			if (_globals->_dialogPtr->_flags == -1 && _globals->_dialogPtr->_condNumLow == -1) @@ -4006,21 +4012,26 @@ bool EdenGame::dial_scan(dial_t *dial) {  			}  		}  		char bidx = (_globals->_dialogPtr->_textCondHiMask >> 2) & 0xF; -		if (!bidx) -			goto no_perso;  //TODO: rearrange +		if (!bidx) { +			skipFl = true; +			break; +		} +  		mask = (_globals->_party | _globals->_partyOutside) & (1 << (bidx - 1));  		if (mask)  			break;  	} -	perso_t *perso; -	for (perso = kPersons; !(perso->_partyMask == mask && perso->_roomNum == _globals->_roomNum); perso++) -		; //Find matching +	 +	if (!skipFl) { +		perso_t *perso; +		for (perso = kPersons; !(perso->_partyMask == mask && perso->_roomNum == _globals->_roomNum); perso++) +			; //Find matching + +		_globals->_characterPtr = perso; +		initCharacterPointers(perso); +		no_perso(); +	} -	_globals->_characterPtr = perso; -	initCharacterPointers(perso); -	no_perso(); -no_perso: -	;  	hidx = _globals->_dialogPtr->_textCondHiMask;  	lidx = _globals->_dialogPtr->_textNumLow;  	_globals->_textNum = ((hidx << 8) | lidx) & 0x3FF; @@ -4140,7 +4151,7 @@ void EdenGame::chronoEvent() {  		return;  	}  	if (_globals->_roomNum == 2817) { -		addToParty(PER_MESSENGER); +		addToParty(PER_ELOI);  		_globals->_gameFlags |= GameFlags::gfFlag40;  		dialautoon();  	} else @@ -4917,7 +4928,7 @@ int EdenGame::loadSound(uint16 num) {  	return size;  } -void EdenGame::ConvertMacToPC() { +void EdenGame::convertMacToPC() {  	// Convert all mac (big-endian) resources to native format  	// Array of longs  	int *p = (int *)_gameLipsync; @@ -4969,7 +4980,7 @@ void EdenGame::loadpermfiles() {  		loadIconFile(2498, _gameIcons);  		loadRoomFile(2497, _gameRooms);  		loadRawFile(2486, _gameLipsync); -		ConvertMacToPC(); +		convertMacToPC();  		break;  	default:  		error("Unsupported platform"); @@ -5077,7 +5088,7 @@ void EdenGame::expandHSQ(byte *input, byte *output) {  // Original name: ajouinfo  void EdenGame::addInfo(byte info) {  	byte idx = _globals->_nextInfoIdx; -	if (kPersons[PER_MESSENGER]._roomNum) +	if (kPersons[PER_ELOI]._roomNum)  		info |= 0x80;  	_infoList[idx] = info;  	if (idx == _globals->_lastInfoIdx) @@ -5442,14 +5453,14 @@ void EdenGame::specialout() {  	if (_globals->_phaseNum >= 32 && _globals->_phaseNum < 48) {  		if (_globals->_newLocation == 9 || _globals->_newLocation == 4 || _globals->_newLocation == 24) { -			kPersons[PER_MESSENGER]._roomNum = 263; +			kPersons[PER_ELOI]._roomNum = 263;  			return;  		}  	}  	if ((_globals->_phaseNum == 434) && (_globals->_newLocation == 5)) { -		removeFromParty(PER_TORMENTOR); -		kPersons[PER_TORMENTOR]._roomNum = 264; +		removeFromParty(PER_JABBER); +		kPersons[PER_JABBER]._roomNum = 264;  		return;  	} @@ -5468,7 +5479,7 @@ void EdenGame::specialout() {  void EdenGame::specialin() {  	if (!(_globals->_party & PersonMask::pmEloi) && (_globals->_partyOutside & PersonMask::pmEloi) && (_globals->_roomNum & 0xFF) == 1) { -		addToParty(PER_MESSENGER); +		addToParty(PER_ELOI);  		_globals->_eloiHaveNews = 1;  	}  	if (_globals->_roomNum == 288) @@ -5481,7 +5492,7 @@ void EdenGame::specialin() {  			_gameRooms[129]._exits[0] = 0;  			_gameRooms[129]._exits[2] = 1;  			_globals->_roomNum = 3074; -			kPersons[PER_MANGO]._roomNum = 3074; +			kPersons[PER_MUNGO]._roomNum = 3074;  			_globals->_eventType = EventType::etEvent5;  			updateRoom(_globals->_roomNum);  			return; @@ -7739,10 +7750,10 @@ void EdenGame::removeFromParty(int16 index) {  // Original name: eloipart  void EdenGame::handleEloiDeparture() { -	removeFromParty(PER_MESSENGER); +	removeFromParty(PER_ELOI);  	_globals->_gameFlags &= ~GameFlags::gfFlag4000; -	kPersons[PER_MESSENGER]._roomNum = 0; -	_globals->_partyOutside &= ~kPersons[PER_MESSENGER]._partyMask; +	kPersons[PER_ELOI]._roomNum = 0; +	_globals->_partyOutside &= ~kPersons[PER_ELOI]._partyMask;  	if (_globals->_roomNum == 2817)  		setChrono(3000);  	_globals->_eloiDepartureDay = _globals->_gameDays; @@ -7765,8 +7776,8 @@ bool EdenGame::checkEloiReturn() {  // Original name: eloirevient  void EdenGame::handleEloiReturn() { -	if (_globals->_areaPtr->_type == AreaType::atValley && !kPersons[PER_MESSENGER]._roomNum) -		kPersons[PER_MESSENGER]._roomNum = (_globals->_roomNum & 0xFF00) + 1; +	if (_globals->_areaPtr->_type == AreaType::atValley && !kPersons[PER_ELOI]._roomNum) +		kPersons[PER_ELOI]._roomNum = (_globals->_roomNum & 0xFF00) + 1;  }  //// phase.c  void EdenGame::incPhase() { @@ -7845,7 +7856,7 @@ void EdenGame::phase353() {  }  void EdenGame::phase369() { -	addToParty(PER_MESSENGER); +	addToParty(PER_ELOI);  	_globals->_narratorSequence = 2;  	_gameRooms[334]._exits[0] = 134;  	_gameRooms[335]._exits[0] = 134; @@ -7877,13 +7888,13 @@ void EdenGame::phase385() {  void EdenGame::phase418() {  	loseObject(Objects::obHorn);  	dialautoon(); -	addToParty(PER_TORMENTOR); +	addToParty(PER_JABBER);  }  void EdenGame::phase433() {  	dialautoon();  	kPersons[PER_MAMMI_4]._flags &= ~PersonFlags::pf80; -	kPersons[PER_TORMENTOR]._flags &= ~PersonFlags::pf80; +	kPersons[PER_JABBER]._flags &= ~PersonFlags::pf80;  	setCharacterHere();  	_globals->_chronoFlag = 0;  	_globals->_chrono = 0; @@ -7900,9 +7911,9 @@ void EdenGame::phase434() {  	_gameRooms[7]._bank = 322;  	removeFromParty(PER_EVE);  	removeFromParty(PER_MONK); -	removeFromParty(PER_MESSENGER); +	removeFromParty(PER_ELOI);  	removeFromParty(PER_GUARDS); -	removeFromParty(PER_TORMENTOR); +	removeFromParty(PER_JABBER);  	_globals->_drawFlags |= DrawFlags::drDrawTopScreen;  } @@ -7997,11 +8008,11 @@ void EdenGame::phase48() {  void EdenGame::phase64() {  	addToParty(PER_DINA); -	kPersons[PER_MESSENGER]._roomNum = 259; +	kPersons[PER_ELOI]._roomNum = 259;  }  void EdenGame::phase80() { -	kPersons[PER_THOO]._roomNum = 0; +	kPersons[PER_TAU]._roomNum = 0;  }  void EdenGame::phase96() { @@ -8017,7 +8028,7 @@ void EdenGame::phase128() {  }  void EdenGame::phase144() { -	addToParty(PER_MESSENGER); +	addToParty(PER_ELOI);  	_gameRooms[113]._video = 0;  	_gameRooms[113]._bank = 317;  } @@ -8067,9 +8078,9 @@ void EdenGame::phase272() {  void EdenGame::phase288() {  	setChoiceYes(); -	kPersons[PER_MANGO]._roomNum = 0; -	removeFromParty(PER_MANGO); -	addToParty(PER_MESSENGER); +	kPersons[PER_MUNGO]._roomNum = 0; +	removeFromParty(PER_MUNGO); +	addToParty(PER_ELOI);  	_globals->_narratorSequence = 8;  } @@ -8109,7 +8120,7 @@ void EdenGame::phase352() {  void EdenGame::phase368() {  	removeFromParty(PER_EVE);  	dialautoon(); -	kPersons[PER_MESSENGER]._roomNum = 1811; +	kPersons[PER_ELOI]._roomNum = 1811;  	kPersons[PER_DINA]._roomNum = 1607;  } @@ -8141,8 +8152,8 @@ void EdenGame::phase416() {  void EdenGame::phase432() {  	_globals->_narratorSequence = 3;  	kPersons[PER_MAMMI_4]._flags |= PersonFlags::pf80; -	kPersons[PER_TORMENTOR]._flags |= PersonFlags::pf80; -	kPersons[PER_MESSENGER]._roomNum = 257; +	kPersons[PER_JABBER]._flags |= PersonFlags::pf80; +	kPersons[PER_ELOI]._roomNum = 257;  	_gameRooms[0]._exits[0] = 0xFF;  	_globals->_drawFlags |= DrawFlags::drDrawTopScreen;  } @@ -8156,7 +8167,7 @@ void EdenGame::phase464() {  	_globals->_areaPtr->_flags |= AreaFlags::afFlag1;  	_globals->_curAreaFlags |= AreaFlags::afFlag1;  	kPersons[PER_MAMMI_6]._flags |= PersonFlags::pf10; -	addToParty(PER_AZIA); +	addToParty(PER_SHAZIA);  	_globals->_citadelAreaNum = _globals->_areaNum;  	naitredino(8);  } @@ -8177,28 +8188,28 @@ void EdenGame::phase496() {  void EdenGame::phase512() {  	removeFromParty(PER_MONK);  	removeFromParty(PER_EVE); -	removeFromParty(PER_AZIA); +	removeFromParty(PER_SHAZIA);  	removeFromParty(PER_GUARDS);  }  void EdenGame::phase528() {  	_globals->_narratorSequence = 11;  	addToParty(PER_MONK); -	addToParty(PER_MESSENGER); +	addToParty(PER_ELOI);  	addToParty(PER_EVE); -	addToParty(PER_AZIA); +	addToParty(PER_SHAZIA);  	addToParty(PER_GUARDS);  }  void EdenGame::phase544() {  	handleEloiDeparture();  	dialautoon(); -	removeFromParty(PER_AZIA); +	removeFromParty(PER_SHAZIA);  	removeFromParty(PER_GUARDS);  }  void EdenGame::phase560() { -	kPersons[PER_MESSENGER]._roomNum = 3073; +	kPersons[PER_ELOI]._roomNum = 3073;  	_gameRooms[127]._exits[1] = 0;  } diff --git a/engines/cryo/eden.h b/engines/cryo/eden.h index 5c9899a51f..5af4401909 100644 --- a/engines/cryo/eden.h +++ b/engines/cryo/eden.h @@ -249,6 +249,7 @@ private:  	void follow();  	void dialonfollow();  	void abortDialogue(); +	void subHandleNarrator();  	void handleNarrator();  	void checkPhraseFile();  	byte *getPhrase(int16 id); @@ -284,7 +285,7 @@ private:  	void loadRoomFile(uint16 num, Room *buffer);  	void loadHnm(uint16 num);  	int loadSound(uint16 num); -	void ConvertMacToPC(); +	void convertMacToPC();  	void loadpermfiles();  	bool ReadDataSyncVOC(unsigned int num);  	bool ReadDataSync(uint16 num);  | 
