Ultima Underworld/technical/conversations/12
Technical Details Warning |
While the encyclopedic nature of the codex means that many articles will have information that could spoil some minor aspects of the game for newer players, this article is known to contain technical information about the game, game engine, data files, logic, etc. This information is not generally useful to the typical game players.
Continue reading at your own discretion. |
This page contains decompiled conversation code from Ultima Underworld. The original files came from Paul Carr and are currently archived here.
This file has been modified from that source (by Sir Robin) in the following ways:
- local variables holding pointers to string text have had that string text specified in a comment on that same line. This should make the conversation code easier to read.
- strings (both dereferenced ones in the code and also the ones added to comments as specified above) have been highlighted for easier reading
- function definitions have been anchored and function calls have been linked, to make it easier to follow the flow of the code
Start viewing the flow at main
// cnvdasm - ultima underworld conversation script disassembler / decompiler // // loading game strings // // conversation #12 // string block 0x0e0c (3596), name Dorna Ironfist // // converting to graph // searching functions // replacing expression opcodes // folding expressions // adding control structures // fixing up functions extern int private[31]; void main() { private[1] = 0; func_029d(); func_0012(); } // end func void func_0012() { private[0] = 1; } // end func void func_0020() { int locals[1]; if ( (((npc_goal == 5 || npc_goal == 6) || npc_goal == 9) && npc_gtarg == 1 || npc_attitude == 0) ) { locals[1] = 0; } else { locals[1] = 1; } // end if return locals[1]; } // end func void func_0063() { npc_gtarg = 1; npc_attitude = 1; npc_goal = 6; func_0012(); } // end func void func_007c() { npc_goal = 1; func_0012(); } // end func void func_008b() { npc_gtarg = 1; npc_goal = 5; npc_attitude = 1; func_0012(); } // end func void func_00a4() { npc_attitude = 6; } // end func void func_00b1() { npc_attitude = param1[0]play_hunger; func_0012(); } // end func void func_00c2() { npc_attitude = 2; func_0012(); } // end func void func_00d1() { npc_attitude = 1; func_0012(); } // end func void func_00e0() { func_0012(); } // end func void func_00ea() { param1[1] = game_days; param1[2] = game_mins; } // end func void func_0106() { int locals[4]; locals[2] = game_days - param2[1]; locals[3] = game_mins - param2[2]; if ( locals[3] < 0 ) { locals[3] = locals[3] + 1440; locals[2] = locals[2] - 1; } // end if if ( locals[2] >= param1[1] && locals[3] >= param1[2] ) { locals[1] = 1; } else { locals[1] = 0; } // end if return locals[1]; } // end func void func_018f() { param1[1] = game_days - param3[1]; param1[2] = game_mins - param3[2]; if ( param1[2] < 0 ) { param1[2] = param1[2] + 1440; param1[1] = param1[1] - 1; } // end if param1[1] = param2[1] - param1[1]; param1[2] = param2[2] - param1[2]; if ( param1[2] < 0 ) { param1[2] = param1[2] + 1440; param1[1] = param1[1] - 1; } // end if } // end func void func_0243() { param1[1] = game_days - param2[1]; param1[2] = game_mins - param2[2]; if ( param1[2] < 0 ) { param1[2] = param1[2] + 1440; param1[1] = param1[1] - 1; } // end if } // end func void func_029d() { int locals[26]; private[6] = get_quest( 1, &locals[2] ); locals[2] = 32; private[7] = get_quest( 1, &locals[3] ); locals[3] = 11; if ( private[0] == 0 ) { say( "\n" "Greetings! I am Dorna Ironfist, leader of the Knights of the Order of the Crux Ansata.\m" ); } // end if if ( private[7] == 1 && private[4] == 0 ) { if ( private[5] == 0 ) { func_0ce2(); } else { func_0d31(); } // end if } // end if locals[4] = private[6]; if ( 0 == locals[4] ) { } else { if ( 1 == locals[4] ) { } else { if ( 2 == locals[4] ) { func_090f(); } else { if ( 3 == locals[4] ) { func_0957(); } else { if ( 4 == locals[4] ) { func_0f77(); } // end if } // end if } // end if } // end if } // end if if ( private[0] == 1 ) { func_0395(); } else { say( "Who art thou?" ); locals[5] = 3; // "I am @GS8." locals[6] = 4; // "I am a simple traveller in search of knowledge." locals[7] = 5; // "I wish to join thy order." locals[8] = 0; // "" locals[26] = babl_menu( 0, &locals[5] ); switch ( locals[26] ) { case 1: private[2] = 1; func_0395(); break; case 2: func_085f(); break; case 3: func_045b(); } // end if break; } // end switch } // end func void func_0395() { int locals[22]; say( "Good day to thee, @GS8." ); say( "Why hast thou come here?" ); locals[1] = 8; // "I seek to join thy Order." locals[2] = 9; // "I am in search of Cabirus' Talismans." locals[3] = 10; // "I merely wished to speak with thee." locals[4] = 11; // "I wish to learn of thy order." locals[5] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: func_045b(); break; case 2: func_063b(); break; case 3: func_0ff4(); break; case 4: func_103c(); break; } // end switch } // end func void func_0408() { int locals[22]; say( "Although I am the leader of this order, it is not my duty to select the candidates for membership. Thou must be invited by a current member of the order if thou dost wish to become a member.\n" " Go, speak to them and return to me when it is appropriate." ); locals[1] = 13; // "I shall, and thank thee." locals[2] = 14; // "I see." locals[3] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: if ( npc_attitude < 2 ) { npc_attitude = 2; } // end if break; case 2: break; } // end switch func_00e0(); } // end func void func_045b() { int locals[29]; locals[1] = sex( 2, &locals[4], &locals[3] ); locals[3] = 15; locals[4] = 16; locals[2] = get_quest( 1, &locals[5] ); locals[5] = 32; if ( locals[2] == 0 ) { func_0408(); } // end if locals[6] = 32; locals[7] = 0; set_quest( 2, &locals[7], &locals[6] ); if ( private[3] ) { say( "Thou wouldst try again to join the Knights of the Crux? We shall see if thou hast learned from thy past errors." ); } else { say( "Thou wishest to join the Knights of the Crux? Very well, thou must answer my questions to the best of thy ability, and I shall judge whether thou art worthy of admittance into the order." ); } // end if say( "Identify thyself, so I may know whom I query." ); locals[8] = 20; // "A valiant warrior, skilled in combat and magic." locals[9] = 22; // "A noble of Britannia, worthy of knighthood." locals[10] = 24; // "The poor @SS1 of my mother." locals[11] = 0; // "" locals[29] = babl_menu( 0, &locals[8] ); switch ( locals[29] ) { case 1: say( "Perhaps if thou wert as skilled in the virtue of humility, thou wouldst be more suited for our order." ); npc_attitude = 1; break; case 2: say( "That is admirable. However, I am not sure we currently have a spot...\n" "\p No, we do not. Perhaps another time." ); npc_attitude = 2; break; case 3: func_0520(); break; } // end switch func_00e0(); } // end func void func_0520() { int locals[22]; say( "That is plain! Art thou willing to sacrifice thy life to join our Order?" ); locals[1] = 26; // "Yes, I am." locals[2] = 27; // "No!" locals[3] = 28; // "Wait! I can explain!" locals[4] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: func_057c(); break; case 2: func_0620(); break; case 3: func_0bd2(); break; } // end switch } // end func void func_057c() { int locals[22]; say( "And dost thou submit to our Justice?" ); locals[1] = 30; // "Indeed, I do." locals[2] = 31; // "No, I do not." locals[3] = 32; // "Perhaps we should discuss this." locals[4] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: func_05d8(); break; case 2: func_0620(); break; case 3: func_0bd2(); break; } // end switch } // end func void func_05d8() { int locals[22]; say( "Very well. Thou hast earned death by coming here, and thou shalt have thy reward. Here is a cup, which bears within it a venom both swift and deadly. Take it and drink it." ); locals[1] = 34; // "Very well." locals[2] = 35; // "And if I refuse?" locals[3] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: func_068f(); break; case 2: func_0620(); break; } // end switch } // end func void func_0620() { int locals[1]; say( "Then thou art no candidate worthy of our Order! Leave here, and return when thou art." ); private[3] = 1; locals[1] = 1; func_00b1( &locals[1] ); } // end func void func_063b() { int locals[22]; say( "Ah, good Sir Cabirus! Many of our Order seek his Talismans, for they are said to confer Virtue both in the seeking and the finding. I cannot, however, share our knowledge about these things with one who is not an initiate of our Order." ); locals[1] = 38; // "May I join thy Order?" locals[2] = 39; // "Very well. I understand. Good day to thee." locals[3] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: if ( private[6] == 0 ) { func_0408(); } else { func_045b(); } // end if break; case 2: func_00e0(); break; } // end switch } // end func void func_068f() { int locals[23]; locals[1] = 40; // "You take the cup. Within it is a is a clear, odorless liquid. You raise it to your lips and . . . " print( 1, &locals[1] ); locals[2] = 41; // "Fling it to the floor." locals[3] = 42; // "Drink it in a draught." locals[4] = 0; // "" locals[23] = babl_menu( 0, &locals[2] ); switch ( locals[23] ) { case 1: func_0620(); break; case 2: func_06e2(); break; } // end switch } // end func void func_06e2() { int locals[30]; locals[1] = sex( 2, &locals[5], &locals[4] ); locals[4] = 43; locals[5] = 44; locals[2] = sex( 2, &locals[7], &locals[6] ); locals[6] = 45; locals[7] = 46; locals[8] = 47; // "The taste of it is like pure water. You wait for several moments, and nothing happens. Then a voice cries out in mourning and a funeral dirge plays. " print( 1, &locals[8] ); say( "@SS1 who drank from the cup is now dead. In @SS2 place stands @GS8, Esquire of the Order of the Crux Ansata. Tell me, wert thou afraid?" ); locals[9] = 49; // "Yes." locals[10] = 50; // "No." locals[11] = 0; // "" locals[30] = babl_menu( 0, &locals[9] ); switch ( locals[30] ) { case 1: func_076e(); break; case 2: func_0620(); break; } // end switch } // end func void func_076e() { int locals[24]; private[3] = 0; say( "Good! To know fear is the first step to knowing Valor. Thou art now a Squire of this Order.\m" ); say( "Thy quest is to find the writ of Lorne, a document written by one of the the first Knights who settled this order in the Abyss.\n" " The document was written during the early years of the Colony, and it contains much knowledge of that time. However, it is now gone, though many suspect it is in the troll homeland.\n" " Seek it, and when thou returns here with it, a knight of our order thou wilt become." ); locals[1] = 32; locals[2] = 2; set_quest( 2, &locals[2], &locals[1] ); locals[3] = 53; // "I thank thee. May I prove worthy of the honor. Fare thee well." locals[4] = 54; // "I thank thee. Canst thou tell me aught of Cabirus' Talismans? They are also my quest." locals[5] = 0; // "" locals[24] = babl_menu( 0, &locals[3] ); switch ( locals[24] ) { case 1: func_00e0(); break; case 2: func_07d5(); break; } // end switch } // end func void func_07d5() { int locals[47]; locals[1] = !private[7]; locals[2] = sex( 2, &locals[4], &locals[3] ); locals[3] = 55; locals[4] = 56; say( "Precious little. They numbered eight, and Cabirus did intend them to go each to one of the Leaders of the eight groups who settled the Abyss. Alas, he perished, and all eight were lost.\n" " 'Tis said they were a Book, bottle of Wine, a Shield, a Sword, a Taper, a Standard, a Cup, and a Ring. Each was imbued with the potent power of a single Virtue, and 'tis said they confer Virtue both in the seeking and the finding.\m" ); if ( private[7] ) { say( "Of the Standard thou dost know, since thou hast earned it by defeating Rodrick, the Chaos Knight. The Taper was stolen, unfortunately. Thou seest how the virtues have suffered since the death of Cabirus." ); } else { say( "I know only of the Taper and the Standard. The Taper of Sacrifice was stolen from us only recently, and we know not its current whereabouts. As for the Standard of Honor, it is said that it is awaiting one who would perform a sufficiently honorable deed." ); } // end if locals[26] = 1; locals[5] = 60; // "Farewell, Brother, and thanks!" locals[27] = 1; locals[6] = 61; // "Goodbye." locals[7] = 0; // "" locals[47] = babl_fmenu( 0, &locals[5], &locals[26] ); switch ( locals[47] ) { case 60: func_00e0(); break; case 61: func_00c2(); break; } // end switch } // end func void func_085f() { int locals[22]; say( "That is good. To learn is to better oneself. How may we advance thy knowledge?" ); locals[1] = 63; // "Tell me of the Talismans of Sir Cabirus." locals[2] = 64; // "What knowest thou of the Trolls?" locals[3] = 65; // "Tell me of thy order." locals[4] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: func_063b(); break; case 2: func_08bb(); break; case 3: func_103c(); break; } // end switch } // end func void func_08bb() { int locals[22]; say( "The Trolls? They are our ancient foes. We are fortunate in that many of them are honorable, in their own way. Some are not, of course. Feral Trolls, we call them. Beware of these. All are deadly foes, but at least the civilized ones fight honorably." ); locals[1] = 67; // "Thank thee for the advice." locals[2] = 68; // "Thy standards appeal to me. How may I join thy Order?" locals[3] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: func_00e0(); break; case 2: if ( private[6] == 0 ) { func_0408(); } else { func_045b(); } // end if break; } // end switch } // end func void func_090f() { int locals[22]; say( "Greeting, Squire @GS8! How didst thou fare in thy quest?" ); locals[1] = 70; // "I have succeeded! Here is the writ." locals[2] = 71; // "I have not yet completed my quest." locals[3] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: func_0b48(); break; case 2: func_0f2f(); break; } // end switch } // end func void func_0957() { int locals[25]; locals[1] = sex( 2, &locals[3], &locals[2] ); locals[2] = 72; locals[3] = 73; say( "Hail, @SS1 @GS8! How fares thy quest?" ); locals[4] = 75; // "I have succeeded! Here is the plate." locals[5] = 76; // "I have not yet completed my quest." locals[6] = 0; // "" locals[25] = babl_menu( 0, &locals[4] ); switch ( locals[25] ) { case 1: func_0c2e(); break; case 2: func_0f2f(); break; } // end switch } // end func void func_09ba() { int locals[26]; locals[1] = sex( 2, &locals[3], &locals[2] ); locals[2] = 77; locals[3] = 78; say( "Now thou art @SS1 @GS8, Knight of the Order of the Crux Ansata. Take thou this helm of plate, worthy of a Knight. Would that we had a horse to give thee as well, for 'tis proper for a Knight." ); locals[4] = 46; if ( take_from_npc( 1, &locals[4] ) == 2 ) { say( "Here, I'll just put it on the floor for thee." ); } // end if locals[5] = 81; // "Are there any more lost artifacts in need of retrieval?" locals[6] = 82; // "How else may I serve the Order?" locals[7] = 0; // "" locals[26] = babl_menu( 0, &locals[5] ); switch ( locals[26] ) { case 1: func_0eb3(); break; case 2: func_0eb3(); break; } // end switch } // end func void func_0a34() { int locals[25]; locals[16] = 0; locals[14] = show_inv( 2, &locals[7], &locals[2] ); while ( locals[14] > 0 ) { locals[15] = 1; if ( locals[15] <= locals[14] ) { if ( locals[1] == param3[0]play_hunger ) { locals[16] = locals[15]; locals[12] = locals[6]; locals[15] = locals[14]; } // end if locals[15] = locals[15] + 1; } // while } // end if if ( locals[16] > 0 ) { locals[19] = 0; locals[20] = -1; locals[21] = -1; locals[22] = -1; locals[23] = -1; locals[24] = -1; x_obj_stuff( 9, &locals[24], &locals[23], &locals[22], &locals[18], &locals[21], &locals[17], &locals[20], &locals[19], &locals[12] ); if ( param2[0]play_hunger != -1 && param2[0]play_hunger != locals[17] ) { locals[1] = 0; } else { if ( param1[0]play_hunger != -1 && param1[0]play_hunger != locals[18] ) { locals[1] = 0; } else { locals[25] = 1; give_to_npc( 2, &locals[12], &locals[25] ); locals[1] = 1; } else { locals[1] = 0; } // end if } // end if } // end if return locals[1]; } // end func void func_0b48() { int locals[27]; locals[1] = 314; locals[2] = -1; locals[3] = 101; if ( func_0a34( &locals[3], &locals[2], &locals[1] ) ) { locals[4] = 32; locals[5] = 3; set_quest( 2, &locals[5], &locals[4] ); say( "Thou hast done well; thy quest is accomplished. Well done!\m" ); func_09ba(); } else { say( "No, I am afraid that is not the writ." ); locals[6] = 85; // "Perhaps this is it." locals[7] = 86; // "I will return when I have found it." locals[8] = 0; // "" locals[27] = babl_menu( 0, &locals[6] ); switch ( locals[27] ) { case 1: func_0b48(); break; case 2: break; } // end switch say( "Good luck in thy continuing quest." ); func_00e0(); } // end if } // end func void func_0bd2() { int locals[23]; say( "There shall be no discussion. Thou mayst go or stay, and accept the consequences of thy decision." ); locals[1] = 89; // "I shall stay." locals[2] = 91; // "I shall be going." locals[3] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: say( "Very well." ); func_057c(); break; case 2: private[3] = 1; say( "Return when thou art truly ready to become an initiate of our order." ); locals[23] = 2; func_00b1( &locals[23] ); break; } // end switch } // end func void func_0c2e() { int locals[30]; locals[1] = 172; locals[2] = 31; locals[3] = -1; if ( func_0a34( &locals[3], &locals[2], &locals[1] ) ) { say( "Thy quest is accomplished. Well done!\n" " All things that belong to the order now belong to thee. I have opened the door to the armory, and thou mayst go there and take items as thou dost need them to accomplish the quests and goals thou dost set for thyself." ); locals[4] = 32; locals[5] = 4; set_quest( 2, &locals[5], &locals[4] ); locals[6] = 3; locals[7] = 10; locals[8] = 0; gronk_door( 3, &locals[8], &locals[7], &locals[6] ); locals[9] = 94; // "Now what wouldst thou have of me?" locals[10] = 95; // "I thank thee. Now I must be going." locals[11] = 0; // "" locals[30] = babl_menu( 0, &locals[9] ); switch ( locals[30] ) { case 1: func_0cd5(); break; case 2: func_00e0(); } // end if } else { break; } // end switch say( "That is not it. Try again." ); func_00e0(); } // end func void func_0cd5() { say( "All that I can tell thee I have told. Seek the virtues on thy own through what is left of our once noble colony. Good luck and honor on thy quests." ); func_00e0(); } // end func void func_0ce2() { int locals[22]; say( "Thou hast killed the bastard knight who held the north of our home to be his. I thank thee for bringing honor back to our order and clearing the villain from our homes.\n" " The action thou hast taken has proven that thou art most worthy. To reward thee for thy deeds, I offer thee the Standard of Honor, one of the Talismans fashioned by Cabirus." ); private[5] = 1; locals[1] = 99; // "My thanks. I am honored indeed to bear it." locals[2] = 100; // "No thank you. I would not know what to do with it." locals[3] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: func_0d92(); break; case 2: func_0e67(); break; } // end switch func_00e0(); } // end func void func_0d31() { int locals[22]; say( "Hast thou reconsidered my offer?" ); locals[1] = 102; // "Yes, I desire the standard of honor." locals[2] = 103; // "No thank thee, I must be going." locals[3] = 104; // "No, but I would like to speak with thee." locals[4] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: func_0d92(); break; case 2: func_0e67(); break; case 3: say( "I shall speak with thee, but I strongly urge thee to take this standard." ); return; break; } // end switch func_00e0(); } // end func void func_0d92() { int locals[35]; locals[2] = 106; // "Dorna turns and rummages through a large iron case, returning soon with a golden standard which he holds before you." print( 1, &locals[2] ); say( "Here it is. Bear it with honor and remember those who bore it before thee. Honor their memory with thy deeds, for the deeds thou hast already done honor thee in our memory." ); locals[1] = find_inv( 2, &locals[4], &locals[3] ); locals[3] = 287; locals[4] = 0; if ( locals[1] > 0 ) { locals[5] = 1; locals[6] = 7; locals[7] = -1; locals[8] = -1; locals[9] = -1; locals[10] = -1; locals[11] = -1; locals[12] = -1; x_obj_stuff( 9, &locals[12], &locals[11], &locals[10], &locals[9], &locals[8], &locals[7], &locals[6], &locals[5], &locals[1] ); locals[13] = 287; if ( take_from_npc( 1, &locals[13] ) == 2 ) { say( "Here, I'll just put it on the floor for you." ); } // end if private[4] = 1; } // end if locals[14] = 109; // "I thank thee, and shall take thy words to heart." locals[15] = 0; // "" locals[35] = babl_menu( 0, &locals[14] ); if ( locals[35] == 1 ) { } // end if } // end func void func_0e67() { int locals[22]; say( "If thou dost ever desire it, return to me and ask for it." ); locals[1] = 111; // "I shall, and soon." locals[2] = 113; // "Thou shalt wait a long time afore I return, I believe." locals[3] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: say( "Both it and I shall be waiting." ); break; case 2: say( "We shall see." ); break; } // end switch func_00e0(); } // end func void func_0eb3() { int locals[22]; say( "The order once owned a golden plate. Years ago it was stolen by a thief who I will not even describe, for he is not worth the time it would take. He fled into the maze and was not seen again.\n" " Since then, it was rumored to have been found several times. The last rumor placed it at the grave of Sir Ingvar. Find it and thou wilt rise even further as a Knight." ); locals[1] = 116; // "I thank thee. Until we meet again..." locals[2] = 117; // "Another quest! Is there no end?" locals[3] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: func_00e0(); break; case 2: func_0efb(); break; } // end switch } // end func void func_0efb() { int locals[22]; say( "Thou hast seen the truth of it! The quest for enlightenment is never-ending. Yet, if thou dost persist in this small quest, thou mayst find rewards to help thee on the greater quest." ); locals[1] = 119; // "Very well. Until we meet again..." locals[2] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); if ( locals[22] == 1 ) { func_00e0(); } // end if } // end func void func_0f2f() { int locals[22]; say( "I am sorry to hear it. Hast spoken to all in this area? Surely someone can help thee?" ); locals[1] = 121; // "If I must... Farewell." locals[2] = 122; // "I'll try. Until we meet again..." locals[3] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: func_00c2(); break; case 2: func_00e0(); break; } // end switch } // end func void func_0f77() { int locals[25]; say( "Thou art one of us now. Thou art always welcome here." ); locals[1] = 124; // "I thank thee and am glad to hear that." locals[2] = 125; // "Wouldst thou please reopen the armory?" locals[3] = 127; // "What canst thou tell me of Sir Cabirus' Talismans?" locals[4] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: break; case 2: say( "Surely. I'll have it done right away." ); locals[23] = 3; locals[24] = 10; locals[25] = 0; gronk_door( 3, &locals[25], &locals[24], &locals[23] ); break; case 3: func_07d5(); break; } // end switch func_00e0(); } // end func void func_0ff4() { int locals[22]; say( "Well I am glad thou desirest my company. However, I am a very busy man, and I don't have time now to talk. Many of the knights of the order are willing to reminisce and talk. Thou shouldst seek them out." ); locals[1] = 129; // "Thank thee, and farewell." locals[2] = 130; // "Canst thou just tell me a bit of the nature of thy order?" locals[3] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: func_00e0(); break; case 2: func_103c(); break; } // end switch } // end func void func_103c() { int locals[44]; locals[1] = !private[7]; say( "Our goal is that of the Avatar - to advance in our knowledge of virtue, in order to better ourselves. When a quest presents itself that will further our understanding of virtue, we undertake it gladly. Perhaps our quests also make Britannia a better place.\m" ); if ( !private[7] ) { say( "Unfortunately, Rodrick, one of our order, recently abandoned his principles and took up residence in the banquet hall to the north, calling himself the "Chaos Knight" and terrorizing the inhabitants of that area. We sent one of our knights, Biden, to defeat him, but he has not returned. I fear the worst." ); } // end if locals[23] = 1; locals[2] = 133; // "Thank thee, and farewell." locals[24] = 1; locals[3] = 134; // "May I join thy order?" locals[25] = locals[1]; locals[4] = 135; // "Perhaps I could defeat him." locals[5] = 0; // "" locals[44] = babl_fmenu( 0, &locals[2], &locals[23] ); switch ( locals[44] ) { case 133: func_00e0(); break; case 134: func_045b(); break; case 135: func_10c4(); break; } // end switch } // end func void func_10c4() { int locals[22]; say( "That would be most honorable of thee, if thou didst truly defeat him and restore peace to our settlement. But I must warn thee that he is an opponent as dishonorable as he is dangerous, and he would not likely spare thy life were he to outfight thee." ); locals[1] = 137; // "I will take care with him, then." locals[2] = 138; // "May I join thy order?" locals[3] = 139; // "Thank thee for thy advice, and farewell." locals[4] = 0; // "" locals[22] = babl_menu( 0, &locals[1] ); switch ( locals[22] ) { case 1: func_00e0(); break; case 2: func_045b(); break; case 3: func_00e0(); break; } // end switch } // end func