fixed graphic glitch when playing the floppy intro with spanish subtitles and added a few comments.
svn-id: r26333
This commit is contained in:
parent
375c63f7bc
commit
c0ca592d54
5 changed files with 102 additions and 93 deletions
|
@ -272,8 +272,12 @@ Compact *SkyCompact::fetchCptInfo(uint16 cptId, uint16 *elems, uint16 *type, cha
|
|||
*elems = _cptSizes[cptId >> 12][cptId & 0xFFF];
|
||||
if (type)
|
||||
*type = _cptTypes[cptId >> 12][cptId & 0xFFF];
|
||||
if (name)
|
||||
if (name) {
|
||||
if (_cptNames[cptId >> 12][cptId & 0xFFF] != NULL)
|
||||
strcpy(name, _cptNames[cptId >> 12][cptId & 0xFFF]);
|
||||
else
|
||||
strcpy(name, "(null)");
|
||||
}
|
||||
return fetchCpt(cptId);
|
||||
}
|
||||
|
||||
|
|
|
@ -256,76 +256,79 @@ uint16 Intro::_mainIntroSeq[] = {
|
|||
};
|
||||
|
||||
uint16 Intro::_cdIntroSeq[] = {
|
||||
PLAYVOICE, 59500,
|
||||
LOADBG, 59499,
|
||||
/* black screen */
|
||||
PLAYVOICE, CDV_00, // Foster: "The old man was trying to tell the future. Looking for pictures in the campfire..."
|
||||
LOADBG, 59499, // Fire crackle
|
||||
LOOPBG,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, 59504,
|
||||
PLAYVOICE, CDV_01, // Shaman: "ohhh, I see evil..."
|
||||
/* Fade up shaman image while he says his line... */
|
||||
SHOWSCREEN, CD_1_LOG,
|
||||
FADEUP, CD_PAL,
|
||||
/* And then play the animation showing the shadows of the fire on his face */
|
||||
BGFLIRT, CD_1,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_02,
|
||||
PLAYVOICE, CDV_02, // Shaman: "Evil born deep beneath the city... far from the light of day."
|
||||
WAITVOICE,
|
||||
STOPFLIRT,
|
||||
BGFLIRT, CD_2,
|
||||
PLAYVOICE, CDV_03,
|
||||
PLAYVOICE, CDV_03, // Shaman: "I see it growing, safe beneath a sky of steel..."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_04,
|
||||
PLAYVOICE, CDV_04, // Shaman: "Scheming in the dark... gathering strength."
|
||||
WAITFLIRT,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_05,
|
||||
PLAYVOICE, CDV_05, // Shaman: "And now... ohhh.... now the evil spreads..."
|
||||
DELAY, 2000,
|
||||
BGFLIRT, CD_3,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_06,
|
||||
PLAYVOICE, CDV_06, // Shaman: "It sends deadly feelers over the land above..."
|
||||
WAITFLIRT,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_07,
|
||||
PLAYVOICE, CDV_07, // Shaman: "Across the gap... reaching towards this very place!"
|
||||
BGFLIRT, CD_5,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_08,
|
||||
PLAYVOICE, CDV_08, // Foster: "I'd seen him do this a hundred times, but I humoured him."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_09,
|
||||
PLAYVOICE, CDV_09, // Foster: "After all, he'd been like a father to me."
|
||||
WAITFLIRT,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_10,
|
||||
PLAYVOICE, CDV_10, // Foster: "And what does this evil want here?"
|
||||
BGFLIRT, CD_7,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_11,
|
||||
PLAYVOICE, CDV_11, // Shaman: "Oh, my son. I fear..."
|
||||
WAITFLIRT,
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_11_LOG,
|
||||
FADEUP, CD_11_PAL,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_12,
|
||||
PLAYVOICE, CDV_12, // Shaman: "I fear the evil wants you!"
|
||||
DELAY, 1600,
|
||||
BGFLIRT, CD_11,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_13,
|
||||
PLAYVOICE, CDV_13, // Foster: "That was when Joey piped up..."
|
||||
WAITVOICE,
|
||||
WAITFLIRT,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_14,
|
||||
LOADBG, 59498, // fade-in heli
|
||||
PLAYVOICE, CDV_14, // Joey: "Foster! Sensors detect incoming audio source!"
|
||||
LOADBG, 59498, // fire crackle to heli start
|
||||
PLAYBG,
|
||||
DOFLIRT, CD_13,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_15,
|
||||
PLAYVOICE, CDV_15, // Shaman: "The evil! The evil is nearly here...!"
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_15_LOG,
|
||||
FADEUP, CD_15_PAL,
|
||||
WAITVOICE,
|
||||
LOADBG, 59496, // quiet heli
|
||||
LOOPBG,
|
||||
PLAYVOICE, CDV_16,
|
||||
PLAYVOICE, CDV_16, // Foster: "It sounded more like a 'copter than a demon."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_17,
|
||||
PLAYVOICE, CDV_17, // Foster: "But next thing, all hell let loose anyway..."
|
||||
DELAY, 2000,
|
||||
SHOWSCREEN, CD_17_LOG,
|
||||
WAITVOICE,
|
||||
BGFLIRT, CD_17,
|
||||
PLAYVOICE, CDV_18,
|
||||
PLAYVOICE, CDV_18, // Shaman: "Run, Foster! Run! Hide from the evil!"
|
||||
LOADBG, 59497, // loud heli
|
||||
LOOPBG,
|
||||
WAITFLIRT,
|
||||
|
@ -333,225 +336,226 @@ uint16 Intro::_cdIntroSeq[] = {
|
|||
FADEDOWN,
|
||||
SHOWSCREEN, CD_19_LOG,
|
||||
FADEUP, CD_19_PAL,
|
||||
PLAYVOICE, CDV_19,
|
||||
PLAYVOICE, CDV_19, // Joey: "Foster! (zzzt) H-Help!"
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_20,
|
||||
PLAYVOICE, CDV_20, // Joey: "Better make my next body move faster, Foster..."
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_20_LOG,
|
||||
FADEUP, CD_19_PAL,
|
||||
WAITVOICE,
|
||||
LOADBG, 59496, // quiet heli
|
||||
LOOPBG,
|
||||
PLAYVOICE, CDV_21,
|
||||
PLAYVOICE, CDV_21, // Foster: "He was only a robot, but, well, I loved the little guy."
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_21_LOG,
|
||||
FADEUP, CD_19_PAL,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_22,
|
||||
PLAYVOICE, CDV_22, // Foster: "Then, as suddenly as it started, the shooting stopped."
|
||||
LOADBG, 59494, // heli whine
|
||||
PLAYBG,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_23,
|
||||
PLAYVOICE, CDV_23, // Foster: "There was a moment's silence as the copter cut its rotors, then..."
|
||||
/* fade down while Foster's saying his line */
|
||||
FADEDOWN,
|
||||
WAITVOICE,
|
||||
SHOWSCREEN, CD_24_LOG,
|
||||
FADEUP, CD_23_PAL,
|
||||
PLAYVOICE, CDV_24,
|
||||
PLAYVOICE, CDV_24, // Reich: "Whoever is in charge here, come forward..."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_25,
|
||||
PLAYVOICE, CDV_25, // Reich: "Now!!"
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_26,
|
||||
PLAYVOICE, CDV_26, // Foster: "Only a fool would have argued with that firepower."
|
||||
WAITVOICE,
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_27_LOG,
|
||||
FADEUP, CD_27_PAL,
|
||||
PLAYVOICE, CDV_27,
|
||||
PLAYVOICE, CDV_27, // Shaman: "... I am the leader of these people... We are peaceful..."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_29,
|
||||
PLAYVOICE, CDV_29, // Reich: "Bring him here."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_30,
|
||||
PLAYVOICE, CDV_30, // Guard: "At once, Commander Reich."
|
||||
WAITVOICE,
|
||||
BGFLIRT, CD_27,
|
||||
PLAYVOICE, CDV_31,
|
||||
PLAYVOICE, CDV_31, // Reich: "We're looking for someone..."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_32,
|
||||
PLAYVOICE, CDV_32, // Reich: "Someone who doesn't belong here..."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_33,
|
||||
PLAYVOICE, CDV_33, // Reich: "Who wasn't born in this garbage dump..."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_34,
|
||||
PLAYVOICE, CDV_34, // Reich: "Who came from the city as a child..."
|
||||
WAITFLIRT,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_35,
|
||||
PLAYVOICE, CDV_35, // Reich: "We want to take him home again."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_36,
|
||||
PLAYVOICE, CDV_36, // Foster: "My mind racing, I remembered where I'd seen that symbol before..."
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_35_LOG,
|
||||
FADEUP, CD_35_PAL,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_37,
|
||||
PLAYVOICE, CDV_37, // Foster: "It was the day the tribe found me..."
|
||||
DOFLIRT, CD_35,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_38,
|
||||
PLAYVOICE, CDV_38, // Foster: "The day of the crash..."
|
||||
DOFLIRT, CD_37,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_39,
|
||||
PLAYVOICE, CDV_39, // Foster: "The day my mother died."
|
||||
WAITVOICE,
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_40_LOG,
|
||||
FADEUP, CD_40_PAL,
|
||||
PLAYVOICE, CDV_40,
|
||||
PLAYVOICE, CDV_40, // Shaman: "You alright, city boy?"
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_41,
|
||||
PLAYVOICE, CDV_41, // Shaman: "Got a name, son?"
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_42,
|
||||
PLAYVOICE, CDV_42, // Foster: "R-Robert."
|
||||
WAITVOICE,
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_43_LOG,
|
||||
FADEUP, CD_43_PAL,
|
||||
PLAYVOICE, CDV_43,
|
||||
PLAYVOICE, CDV_43, // Shaman: "Hah! Welcome to the Gap, Robert!"
|
||||
WAITVOICE,
|
||||
DOFLIRT, CD_43,
|
||||
PLAYVOICE, CDV_45,
|
||||
PLAYVOICE, CDV_45, // Foster: "As he patched me up, the old man had gently explained that there was no way back into the City..."
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_45_LOG,
|
||||
FADEUP, CD_45_PAL,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_46,
|
||||
PLAYVOICE, CDV_46, // Foster: "And I already knew there was nothing he could do for mother."
|
||||
DOFLIRT, CD_45,
|
||||
WAITVOICE,
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_47_LOG,
|
||||
FADEUP, CD_47_PAL,
|
||||
PLAYVOICE, CDV_47,
|
||||
PLAYVOICE, CDV_47, // Foster: "His tribe was poor, but they treated me like one of their own..."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_48,
|
||||
PLAYVOICE, CDV_48, // Foster: "I learned how to survive in the wasteland they called the Gap..."
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_48_LOG,
|
||||
FADEUP, CD_48_PAL,
|
||||
WAITVOICE,
|
||||
BGFLIRT, CD_48,
|
||||
PLAYVOICE, CDV_49,
|
||||
PLAYVOICE, CDV_49, // Foster: "And scavenging from the City dumps."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_50,
|
||||
PLAYVOICE, CDV_50, // Foster: "As the years passed, I forgot my life in the City."
|
||||
WAITFLIRT,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_51,
|
||||
PLAYVOICE, CDV_51, // Foster: "Discovered new talents..."
|
||||
BGFLIRT, CD_49,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_52,
|
||||
PLAYVOICE, CDV_52, // Foster: "Hah!"
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_53,
|
||||
PLAYVOICE, CDV_53, // Joey: "I'm your (zzzt) friend... call me (zzzt) Joey."
|
||||
WAITVOICE,
|
||||
WAITFLIRT,
|
||||
PLAYVOICE, CDV_54,
|
||||
PLAYVOICE, CDV_54, // Foster: "And got a second name."
|
||||
DOFLIRT, CD_50,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_55,
|
||||
PLAYVOICE, CDV_55, // Shaman: "This is what we'll call you now you've come of age, son."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_56,
|
||||
PLAYVOICE, CDV_56, // Shaman: "We found you... we fostered you..."
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_55_LOG,
|
||||
FADEUP, CD_55_PAL,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_57,
|
||||
PLAYVOICE, CDV_57, // Shaman: "So that makes you Robert Foster."
|
||||
WAITVOICE,
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_58_LOG,
|
||||
FADEUP, CD_58_PAL,
|
||||
PLAYVOICE, CDV_58,
|
||||
PLAYVOICE, CDV_58, // Reich: "...Wasted enough time!"
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_59,
|
||||
PLAYVOICE, CDV_59, // Reich: "Give us the runaway or we'll shoot everyone..."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_60,
|
||||
PLAYVOICE, CDV_60, // Reich: "Starting with you, grandad!"
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_61,
|
||||
PLAYVOICE, CDV_61, // Foster: "The old man had been right, for once..."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_62,
|
||||
PLAYVOICE, CDV_62, // Foster: "It was me they wanted."
|
||||
BGFLIRT, CD_58,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_63,
|
||||
PLAYVOICE, CDV_63, // Shaman: "No, my son! Don't let the evil take you! Run!"
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_64,
|
||||
PLAYVOICE, CDV_64, // Guard: "DNA scan confirms it's him, sir."
|
||||
WAITFLIRT,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_65,
|
||||
PLAYVOICE, CDV_65, // Foster: "Evil had come to the Gap, just as he said."
|
||||
FADEDOWN,
|
||||
WAITVOICE,
|
||||
SHOWSCREEN, CD_66_LOG,
|
||||
FADEUP, CD_66_PAL,
|
||||
PLAYVOICE, CDV_66,
|
||||
PLAYVOICE, CDV_66, // Reich: "Take him."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_67,
|
||||
PLAYVOICE, CDV_67, // Foster: "But had the old man seen why it wanted me?"
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_67_LOG,
|
||||
FADEUP, CD_67_PAL,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_68,
|
||||
PLAYVOICE, CDV_68, // Foster: "Or what it would do next?"
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_69,
|
||||
PLAYVOICE, CDV_69, // Foster: "It was too late to ask him now."
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_69_LOG,
|
||||
FADEUP, CD_69_PAL,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_70,
|
||||
PLAYVOICE, CDV_70, // Guard: "Leaving destruction zone, Commander Reich."
|
||||
DOFLIRT, CD_69,
|
||||
WAITVOICE,
|
||||
FADEDOWN,
|
||||
PLAYVOICE, CDV_71,
|
||||
PLAYVOICE, CDV_71, // Reich: "Good. Detonate."
|
||||
WAITVOICE,
|
||||
SHOWSCREEN, CD_72_LOG,
|
||||
FADEUP, CD_72_PAL,
|
||||
PLAYVOICE, CDV_72,
|
||||
PLAYVOICE, CDV_72, // Foster: "Much too late."
|
||||
WAITVOICE,
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_73_LOG,
|
||||
FADEUP, CD_73_PAL,
|
||||
PLAYVOICE, CDV_73,
|
||||
PLAYVOICE, CDV_73, // Foster: "Why, you murdering..."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_74,
|
||||
PLAYVOICE, CDV_74, // Reich: "Keep him quiet."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_75,
|
||||
PLAYVOICE, CDV_75, // Foster: "All I could do was wait."
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_76_LOG,
|
||||
FADEUP, CD_76_PAL,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_76,
|
||||
PLAYVOICE, CDV_76, // Foster: "Just like on a hunt. Just like the old man taught me."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_77,
|
||||
PLAYVOICE, CDV_77, // Foster: "Wait... and be ready."
|
||||
WAITVOICE,
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_78_LOG,
|
||||
FADEUP, CD_78_PAL,
|
||||
PLAYVOICE, CDV_78,
|
||||
PLAYVOICE, CDV_78, // Foster: "It was dawn when we reached the City."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_79,
|
||||
PLAYVOICE, CDV_79, // Reich: "Land in the central Security compound."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_80,
|
||||
PLAYVOICE, CDV_80, // Foster: "A dawn my tribe would never see."
|
||||
BGFLIRT, CD_100,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_81,
|
||||
PLAYVOICE, CDV_81, // Foster: "They were no more than a note in Reich's book now."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_82,
|
||||
PLAYVOICE, CDV_82, // Guard: "Yes, sir. Locking on automatic landing beacon."
|
||||
WAITVOICE,
|
||||
WAITFLIRT,
|
||||
SHOWSCREEN, CD_101_LOG,
|
||||
BGFLIRT, CD_101,
|
||||
PLAYVOICE, CDV_83,
|
||||
PLAYVOICE, CDV_83, // Foster: "But what was I? Why did..."
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_84,
|
||||
PLAYVOICE, CDV_84, // Guard: "Sir! The guidance system! It's gone crazy!"
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_85,
|
||||
PLAYVOICE, CDV_85, // Guard: "We're going to HIT!"
|
||||
WAITVOICE,
|
||||
WAITFLIRT,
|
||||
SHOWSCREEN, CD_102_LOG,
|
||||
PLAYVOICE, CDV_86,
|
||||
PLAYVOICE, CDV_86, // Foster: "Maybe I'd get some answers now."
|
||||
DOFLIRT, CD_102,
|
||||
FADEDOWN,
|
||||
SHOWSCREEN, CD_103_LOG,
|
||||
FADEUP, CD_103_PAL,
|
||||
BGFLIRT, CD_103,
|
||||
WAITVOICE,
|
||||
PLAYVOICE, CDV_87,
|
||||
PLAYVOICE, CDV_87, // Foster: "If I survived another 'copter crash."
|
||||
WAITFLIRT,
|
||||
WAITVOICE,
|
||||
STARTMUSIC, 2,
|
||||
|
|
|
@ -224,7 +224,7 @@ void Logic::arAnim() {
|
|||
// On character boundary. Have we been told to wait?
|
||||
// if not - are WE colliding?
|
||||
|
||||
if (_compact->waitingFor == 0xffff) { // 1st cycle of re-route does
|
||||
if (_compact->waitingFor == 0xffff) { // 1st cycle of re-route does not require collision checks
|
||||
mainAnim();
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -83,7 +83,6 @@ int32 GmChannel::getNextEventTime(void) {
|
|||
return -1;
|
||||
} else
|
||||
return retV;
|
||||
|
||||
}
|
||||
|
||||
uint8 GmChannel::process(uint16 aktTime) {
|
||||
|
|
|
@ -155,10 +155,12 @@ void Screen::setPalette(uint16 fileNum) {
|
|||
}
|
||||
|
||||
void Screen::showScreen(uint16 fileNum) {
|
||||
|
||||
// This is only used for static images in the floppy and cd intro
|
||||
if (_currentScreen)
|
||||
free(_currentScreen);
|
||||
_currentScreen = _skyDisk->loadFile(fileNum);
|
||||
// make sure the last 8 lines are forced to black.
|
||||
memset(_currentScreen + GAME_SCREEN_HEIGHT * GAME_SCREEN_WIDTH, 0, (FULL_SCREEN_HEIGHT - GAME_SCREEN_HEIGHT) * GAME_SCREEN_WIDTH);
|
||||
|
||||
if (_currentScreen)
|
||||
showScreen(_currentScreen);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue