Fallout 2 mod Unofficial Fo2 patch thread - problems, reports, suggestions

Per said:
On a different note, I noticed something that may be more fit for the RP. The item descriptions say that broc flower is "plentiful" and xander root is "rare". However, the map script actually spawns more roots than flowers: 2-4 of each and possibly 1 more root.

There is also a deactivated code in dude_obj that gives you a possibility to make healing powder from xander + broc if you have high enough outdoorsman. Would be a nice little feature for RP 1.3.
 
Ok, I've spent over an hour looking on in this thread and trying to find the answer to my question, so I decided to go ahead and make a post.

After successfully installing the latest killap patch, I keep receiving the "Compatibility mode" error. I have spent the last hour searching the 50+ page thread about your patch, and I only found one person talking about having the same problem.

For him the problem went away when he unchecked all the options under running the game under compatibility mode. My game was on a clean install, and I had not forced it to run in compatibility mode. Just to check, I uninstalled your patch and the game boots right up without any problem. I am on Windows 7 beta, but some internet snooping has shown me that people are successfully running this patch for Fallout 2 on the same OS.

Are there any tips anyone can offer as to how to get around this compatibility error problem?
 
I've responded to the above user with a pm, but for future people, below are steps that should resolve the problem.


1. Go here and download the latest version of sfall for F2 for your specific OS.
2. Extract this file to some temporary location.
3. Copy over ONLY the ddraw.dll file to where you installed F2. Windows will ask you to overwrite the file. Say yes.
4. Right click this and save the file to where you installed F2 (and where you just copied over the .dll file) Windows will ask you to overwrite the file. Say yes.

Note, these above steps are only for my unofficial patch and not for use with my restoration project.
 
It's an annoying problem. windows 7 automatically adds some gunk to the compatibility mode settings that the user has no control over, and can't get rid of. :(

I think I've modified sfall to ignore all of the junk now, (which luckily don't cause it problems like the other real settings on the compatibility tab do,) but in case anyone has a problem that following killaps instructions to update sfall doesn't fix, it's worth pointing out that the check for compatibility modes can be disabled in ddraw.ini. I only added that option after the win 7 trouble though, so you'll probably still need to get the updated version first anyway.
 
A couple more observations on the flower/root thing. It turns out shopkeepers spawn these either in equal amounts, or more roots. This sort of makes sense since if roots are rare, you'd keep them in stock, while the demand for flowers wouldn't be as big.

In random encounters, roots and flowers spawn in equal amounts in random crates and on the ground. No big deal since they aren't common in the first place. Of course, it would make sense for more flowers to spawn on the ground.

In Metzger's inventory, there are only roots; the following line instead spawns normal flowers. I'm wondering if this could be a mistake. Isn't it more likely that Metzger would keep useful matching ingredients rather than worthless flowers? It seem more in character.
 
In a recent move I lost my original Fallout2 disc so I bought the 3-in-1 DVD "Fallout Collection" that looks like it's from MicroForte. When I installed Fallout 1 and added Mash's high res patch, it says I have the "white label" version. I'm running WinXP.

I decided that I wanted to install the Lost Hope mod. I followed the instructions in the Lost Hope 1.05 read me, but when I launch the Lost Hope .exe, I get the usual Fallout2 screens. The only indication that anything is different is that the displayed version number is Lost Hope 1.05.

EDIT:
Nevermind. I reinstalled and did the set 'read only' flag again for proto dir and it works... not sure what I did the first time.
 
One more bugs

4.Smitty from Den attack me when i bring him fuel controller from Gecko. Before Smitty was stolen, but successfully.

5.In the Broken hills. I help jakob and ailin to free frank and manson, take bomb for explode mine. Help Markus to find missing people and:

a)When I Advise Markus about missing people, dont receive expirience for it. And next dialog with Markus wrong i think, hi say, exact I talk him about jakob and Ailin.

b)Then i try talk to Markus again, i want advise him about: "Jakob and Alin want me to explode the mine"... but this dialog line is not present, i see only "Jakob and Alin ask me to free two persons from prison"... although i free them alredy.

6.Eldrige in New Reno dasnt have any "special goods" for me, his special basket on the barter screen is empty. I'm Salvatore Man! Where is my Bozaar!)
 
And here's my final bug list (I hope)....

---------

Sierra Army Depot

1. If you enter the Sierra Army Depot for the very first time and manage to reach the security terminal on level 2 without causing any problems, then you get this rather confusing greeting message from the terminal:

Code:
Skynet Security Systems
Warning! Intruder Detected Level 1
Retina Scanner Activated
Scanning
Searching DatabaseGeneral CliftonLast Accessed: December 5, 2120Skynet Security Systems
Warning! Intruder Detected Level

If you had used Corporal Dixon's eyeball on the retinal scanner on level 2, then "General Clifton" above will be replaced with Corporal Dixon instead.

If you exit right away and then try to access the terminal again, you get the following message:

Code:
Skynet Security Systems
Warning! Intruder Detected Level 1
Retina Scanner Activated
Scanning
Searching DatabaseGeneral CliftonLast Accessed: 0 days ago.Skynet Security Systems
Warning! Intruder Detected Level

Needless to say, this is still rather confusing. In fact, there are three issues here:

a) The terminal couldn't have been last accessed in 2120, seeing that the evacuation was in 2077. (It's a bit confusing, but "Last Accessed" refers to the last time the terminal was accessed, not the last time the retina scanner was used.) Changing this to a more appropriate date (say, August 5, 2077) should suffice.

b) The second Skynet Security Systems line is redundant. On looking at the code, originally, the script was supposed to detect which levels of the SAD had the alarm turned on, and then to display the levels here. However, this feature was never fully implemented -- the variable keeping track of alarm states is initiated and parsed, but never appended to the text -- and it is evident that the developers replaced that line with the first Skynet Security Systems line and somehow forgot to remove the second line. This second line should probably be removed, though it may be possible for you to play around with it for the Restoration Project.

c) The text is bunched up...and General Clifton's name looks a bit out of place. There actually is some text in the .msg file that provides the logical links for the reader to understand the context much better, but this was inexplicably left out. This text should probably be put back in.

The fix involves fixing both wsterm2a.ssl and wsterm2a.msg files. In wsterm2a.ssl, the fix is applied to Node002, as thus:

Code:
// Note: lines commented out refer to the unimplemented alarm level notification,
// which in my opinion has been replaced with something simpler. The original code
// left the lines in place since nothing really is displayed, but for simplication
// purposes I've decided to comment them out.
procedure Node002 begin
   variable date;
   variable who;
   variable days_ago;
//   variable more_than_one;
//   variable security_breach;

   if (local_var(LVAR_Last_Used) == 0) then begin
       set_local_var(LVAR_Last_Used,GAME_TIME_IN_DAYS);
       date:=305;               // message_str number
   end
   else begin
       days_ago:=1;
       date:=GAME_TIME_IN_DAYS-(local_var(LVAR_Last_Used));
       set_local_var(LVAR_Last_Used,GAME_TIME_IN_DAYS);
   end

   if (map_var(MVAR_Eyeball_Used) == EYEBALL_DIXON) then begin
       who:=303;
   end
   else begin
       who:=304;
   end

//   if (map_var(MVAR_Security_Level_1) == 1) then begin
//       security_breach:="1";
//       more_than_one:=1;
//   end
//
//   if (map_var(MVAR_Security_Level_2) == 1) then begin
//       if (more_than_one == 1) then
//           security_breach+=", 2";
//       else
//           security_breach+="2";
//       more_than_one:=1;
//   end
//
//   if (map_var(MVAR_Security_Level_3) == 1) then begin
//       if (more_than_one == 1) then
//           security_breach+=", 3";
//       else
//           security_breach+="3";
//       more_than_one:=1;
//   end
//
//   if (security_breach) then
//       security_breach+=".";

   if (days_ago == 0) then
       Reply(mstr(113)+mstr(300)+mstr(who)+mstr(301)+mstr(date));
   else
       Reply(mstr(113)+mstr(300)+mstr(who)+mstr(301)+date+mstr(306));

   NOption(115,Node002a,004);
   NOption(116,Node012,004);
   NOption(117,Node999,004);
   NOption(118,Node999,004);
end

As to wsterm2a.msg, fixing and clarifying the following lines should do the trick:

Code:
{113}{}{Skynet Security Systems
                                         Warning! Intruder Detected Level 1
                                Retina Scanner Activated
                                       Scanning...
                                                             Searching Database}
{300}{}{ - ID Confirmed: }
{301}{}{
                               Terminal Last Accessed: }
{303}{}{Corporal Dixon}
{304}{}{General Clifton}
{305}{}{August 5, 2077}
{306}{}{ days ago.}

Doing both of the above should make the initial greeting text look like this:

Code:
Skynet Security Systems
Warning! Intruder Detected Level 1
Retina Scanner Activated
Scanning...
Searching Database - ID Confirmed: General Clifton
Terminal Last Accessed: August 5, 2077

2. If you open the "Penpal Greetings" e-mail on the Munitions Access Terminal, then the terminal melts down. The shockplates, if they were active, is automatically disabled -- presumably because the controlling computer is destroyed (See Node019 for details). However, any force fields that were active remains active, which is not surprising given that there's no code in place in Node019. This seems a bit inconsistent. The fix is to copy and paste any perma-forcefield disabling code (say, from Node023) into Node019 so that both shockplates and force fields are disabled on a meltdown.

3. If the player agrees to help Skynet, Skynet will tell the player to retrieve a brain from level 4 and then return for "further instructions". However, if the player does that, then all he or she gets is the message: "Error! Downloading file corrupted." Note that it doesn't matter what type of brain the player retrieved. The message is still the same.

If one looks at the .msg file, then it is obvious that there's supposed to be further instructions -- see line 113 of wsterm3b.msg for details. So how come this message is not showing up?

The problem lies in talk_p_proc of wsTerm3b.ssl. The very first conditional is to check if GVAR_SKYNET == Skynet_Brain, and to call Node003 if the conditional is true. Ironically, the exact same conditional
is checked again closer to the end of the procedure, but this time, it calls on Node002 if it's true. Node002 is the node that displays the "further instructions" found in line 113, but obviously, it's quite impossible to reach this part of the script. The simple fix is to change the very first conditional to something more reasonable (i.e. similar to the other terminals), such as:

Code:
   if (global_var(GVAR_BRAIN_BOT_BRAIN) != 0) then begin
       start_gdialog(NAME,self_obj,4,-1,-1);
       gSay_Start;
           call Node003;
       gSay_End;
       end_dialogue;
   end


San Francisco

1. In corrections.txt, you state that:

"When one helps the rocket supervisor from Hubologists to retrieve both verti plans and fuel he's all happy. I managed however to copy the plans and steal the fuel for the tanker using Badger's help and he still says that he needs help but no option to grant it is available." This is no longer the case and a new line of dialogue was added to be said by him in this case.

However, this is not the case. In fact, while Harry's .msg file has been updated with the new line, the .int file shipped with the Unofficial Patch is still the same version as the updated file included in the official v1.02D patch. I presume that the changes were in the new .int file but somehow wasn't included with the Unofficial Patch.


The Enclave

1. The computer terminal in the Enclave is a bit bugged. I'll list each of them one by one and try to suggest a suitable solution.

The first bug is a minor continuity bug: if you kill the President and swipe his passkey, but return and active the Counter Insurgency Protocol before blowing up the reactor (i.e. Frank Horrigan hasn't shown up yet), then the terminal will still claim that it has located a target. Hmmm...

The simple solution is to check to is if the reactor has gone offline (global_var(GVAR_ENCLAVE_REACTOR) == ENCLAVE_REACTOR_OFF), and to create some suitable dialog if that is the case. So something like:

Code:
procedure Node021a begin
   if (obj_is_carrying_obj_pid(dude_obj,PID_PRES_ACCESS_KEY)) then begin
       if (cur_map_index == MAP_ENCLAVE_END_FIGHT) then begin
           if (global_var(GVAR_ENCLAVE_REACTOR) == ENCLAVE_REACTOR_OFF) then
              call Node022;
           else
              call Node022a;
       end else
          call Node023;
   end
   else
       call Node024;
end

procedure Node033 begin
   if (cur_map_index == MAP_ENCLAVE_END_FIGHT) then begin
      if (global_var(GVAR_ENCLAVE_REACTOR) == ENCLAVE_REACTOR_OFF) then
         call Node022;
      else
         call Node022a;
   end else
      call Node023;
end

procedure Node022a begin
   Reply(266);

   CompOption(267,Node004);
   if (hacked_system) then
      CompOption(268,Node020a);
   else
      CompOption(268,Node020);
end

Lines 266, 267, and 268 should read something like:

Code:
{266}{}{Presidential Security Passkey recognized. Good day, Mr. President.... Emergency Counter Insurgency Protocol initiated...**Error** Target not found. Please ensure that the sensors are working correctly. If not, please submit form FG-I-106-32-0635 to authorize repair services. Thanks for using another fine Vault-Tec product. Good day.}
{267}{}{(Hmm...Maybe it'll work once there's someone actually there. I'll have to give it a try later.) Return to User ID.}
{268}{}{(I wonder what else I can try?) Back.}

2. If you have high enough science skills to access any account other than Smith, J., but you still elect to log on as Smith, J., then initially, the only option available to you (other than logging off) is "Security Status". After that, though, you will have access to other options as though you have selected whichever ID granted you the highest access!

Another symptom of the same problem, though this is admittedly a much rarer case: if your science skill is below 100, you can still log in as Smith, J. However, despite the terminal stating you have access to the Security Status option, you do not get that option in your choice of responses! In fact, under this scenario you can only choose to log out.

This is what's happening: each option selectable by the user is handled by a different Node (Nodes 009 to 014). However, each node makes a check against the user's science skill to determine which options to display, which only works if the player selected the account with the highest access rights. In the case of science skill below 100, the lowest level option (Security Status) needs a minimal skill of 100 to access, but you do not need any science skill technically speaking in order to log on as Smith, J., leading to the oddity observed.

The fix is to make the check against current userID instead (you will need to create a new variable to keep track of this) and display the options accordingly. So something like the following:

Code:
variable current_userid := 0;

#define NOUSER  0
#define SMITH   1
#define MURRAY  2
#define CURLING 3
#define BIRD    4

procedure Node004 begin
   if (local_var(LVAR_Said_4) == 0) then begin
       inc_local_var(LVAR_Said_4);
       if (dude_iq >= 7) then
           Reply(124);
       else
           Reply(125);
   end
   else
       Reply(126);

   current_userid := NOUSER;

   CompOption(127,Node008);
   CompOption(128,Node020);
   if (Science_Skill >= 125) then
       CompOption(129,Node005);
   if (Science_Skill >= 150) then
       CompOption(130,Node006);
   if (Science_Skill >= 175) then
       CompOption(131,Node007);
   CompOption(132,NodeEnd);
end

procedure Node005 begin
   Reply(mstr(133)+mstr(134)+mstr(135));
   current_userid := MURRAY;

   CompOption(136,Node014);
   CompOption(137,Node009);
   CompOption(138,Node004);
end

procedure Node006 begin
   Reply(mstr(139)+mstr(140)+mstr(141)+mstr(142)+mstr(143));
   current_userid := CURLING

   CompOption(144,Node012);
   CompOption(145,Node013);
   CompOption(146,Node014);
   CompOption(147,Node009);
   CompOption(148,Node004);
end

procedure Node007 begin
   Reply(mstr(149)+mstr(150)+mstr(151)+mstr(152)+mstr(153)+mstr(154)+mstr(155));
   current_userid := BIRD;

   CompOption(156,Node010);
   CompOption(157,Node011);
   CompOption(158,Node012);
   CompOption(159,Node013);
   CompOption(160,Node014);
   CompOption(161,Node009);
   CompOption(162,Node004);
end

procedure Node008 begin
   Reply(163);
   current_userid := SMITH;

   CompOption(164,Node009);
   CompOption(165,Node004);
end

procedure Node009 begin
   // downloaded Security Status
   set_global_var(GVAR_HOLODISK_ENCLAVE_SECURITY,1);

   Reply(166);

   if (current_userid >= BIRD) then begin
       CompOption(167,Node010);
       CompOption(168,Node011);
   end
   if (current_userid >= CURLING) then begin
       CompOption(169,Node012);
       CompOption(170,Node013);
   end
   if (current_userid >= MURRAY) then
       CompOption(171,Node014);
   CompOption(172,Node004);
end

procedure Node010 begin
   // download State of the Nation
   set_global_var(GVAR_HOLODISK_ENCLAVE_STATE,1);

   Reply(173);

   if (current_userid >= BIRD) then
       CompOption(174,Node011);
   if (current_userid >= CURLING) then begin
       CompOption(175,Node012);
       CompOption(176,Node013);
   end
   if (current_userid >= MURRAY) then
       CompOption(177,Node014);
   if (current_userid >= SMITH) then
       CompOption(178,Node004);
   CompOption(179,Node004);
end

procedure Node011 begin
   // download Word List
   set_global_var(GVAR_HOLODISK_ENCLAVE_WORD,1);

   Reply(180);

   if (current_userid >= BIRD) then
       CompOption(181,Node010);
   if (current_userid >= CURLING) then begin
       CompOption(182,Node012);
       CompOption(183,Node013);
   end
   if (current_userid >= MURRAY) then
       CompOption(184,Node014);
   if (current_userid >= SMITH) then
       CompOption(185,Node009);
   CompOption(186,Node004);
end

procedure Node012 begin
   if (cur_map_index == MAP_ENCLAVE_BARRACKS) then begin
       if (global_var(GVAR_ENCLAVE_TURRET_GUARD) == TURRET_ALERT) then
           Reply(187);
       else if (global_var(GVAR_ENCLAVE_TURRET_GUARD) == TURRET_NORMAL) then
           Reply(188);
       else
           Reply(189);
   end

   else if (cur_map_index == MAP_ENCLAVE_DETENTION) then begin
       if (global_var(GVAR_ENCLAVE_TURRET_DETENTION) == TURRET_ALERT) then
           Reply(190);
       else if (global_var(GVAR_ENCLAVE_TURRET_DETENTION) == TURRET_NORMAL) then
           Reply(191);
       else
           Reply(192);
   end

   else if (cur_map_index == MAP_ENCLAVE_REACTOR) then begin
       if (global_var(GVAR_ENCLAVE_TURRET_SCIENCE) == TURRET_ALERT) then
           Reply(193);
       else if (global_var(GVAR_ENCLAVE_TURRET_SCIENCE) == TURRET_NORMAL) then
           Reply(194);
       else
           Reply(195);
   end

   else if (cur_map_index == MAP_ENCLAVE_PRESIDENT) then begin
       if (global_var(GVAR_ENCLAVE_TURRET_PRESIDENT) == TURRET_ALERT) then
           Reply(196);
       else if (global_var(GVAR_ENCLAVE_TURRET_PRESIDENT) == TURRET_NORMAL) then
           Reply(197);
       else
           Reply(198);
   end

   else begin
       if (global_var(GVAR_ENCLAVE_TURRET_MAIN) == TURRET_ALERT) then
           Reply(199);
       else if (global_var(GVAR_ENCLAVE_TURRET_MAIN) == TURRET_NORMAL) then
           Reply(200);
       else
           Reply(201);
   end

   // The check below is useless since one needs a science skill of at least
   // 150 to reach Node012 in the first place, but it is left in place just
   // in case...
   if (Science_Skill >= 125) then
       CompOption(202,Node020);
   if (current_userid >= BIRD) then begin
       CompOption(203,Node010);
       CompOption(204,Node011);
   end
   if (current_userid >= CURLING) then
       CompOption(205,Node013);
   if (current_userid >= MURRAY) then
       CompOption(206,Node014);
   if (current_userid >= SMITH) then
       CompOption(207,Node009);
   CompOption(208,Node004);
end

procedure Node013 begin
   set_global_var(GVAR_HOLODISK_ENCLAVE_CHEMICAL,1);

   Reply(209);

   if (current_userid >= BIRD) then begin
       CompOption(210,Node010);
       CompOption(211,Node011);
   end
   if (current_userid >= CURLING) then
       CompOption(212,Node012);
   if (current_userid >= MURRAY) then
       CompOption(213,Node014);
   if (current_userid >= SMITH) then
       CompOption(215,Node009);
   CompOption(216,Node004);
end

procedure Node014 begin
   set_global_var(GVAR_HOLODISK_ENCLAVE_ATOMIC,1);

   Reply(217);

   if (current_userid >= BIRD) then begin
       CompOption(218,Node010);
       CompOption(219,Node011);
   end
   if (current_userid >= CURLING) then begin
       CompOption(220,Node012);
       CompOption(221,Node013);
   end
   if (current_userid >= SMITH) then
       CompOption(222,Node009);
   CompOption(223,Node004);
end

3. When using the terminal, there is an inexplicable check against the sneak skill to determine minimal intelligence needed to use the terminal -- in procedure use_p_proc, a passed skill check or a tagged sneak skill lowers the intelligence requirement. I think the developers really meant SKILL_SCIENCE -- perhaps they used Watcom's auto completion feature inappropriately here? Though honestly, I can't see how that could've happened... At any rate, replacing all instances of SKILL_SNEAK to SKILL_SCIENCE ought to do the trick.

4. Each userID has access to something called "Security Status", and judging by the global variable set, it was supposed to download some text to the Pipboy. However, no such holodisk entry exists --
there's no link to it in holodisk.txt, nor are there corresponding text entries in pipboy.msg.

I don't have access to the Fallout Reference Bible right now, so if there's some mention of it there,
then maybe you can make something up and put the appropriate references (perhaps more a job for your Restoration Project). Otherwise, changing line 166 to something like: "Download failed - Security Status file missing." should also do the trick.

5. Logging in as Tom Murray or Dr. Curling results in option texts that are jumbled together, primarily due to lack of spaces, commas, or both. To fix, add a space at the end of lines 134 and 139, and add a comma and a space at the end of lines 140, 141, and 142.

6. Another minor continuity error: if you hack the terminal and try to fool it into thinking you have the presidential access passkey when you don't actually have it, a successful hack takes ten minutes plus a few extra ones (see line 264). There are a few problems here: a) If the player does this hacking with the counter insurgency option with Frank Horrigan, then the 10 minutes it took to hack the terminal means that the player is automatically toast, since the countdown only lasts 10 minutes. b) Even if the player was hacking under some other scenario, time does not actually advance once the player logs out. c) Node020a makes reference to a variable here_before. However, since here_before is always zero, Node020a can only display line 264 and not line 265. Which is just as well, I suppose, given that line 265 does not currently exist.

I would recommend removing all references to time, as well as setting the variable here_before to 1 in Node020a. Lines 264 and 265 can read something like:

Code:
{264}{}{Presidential Security Passkey recognized. Good day, Mr. President. (Yes! Now let's see what I can do...)}
{265}{}{(What else can I do?)}

7. Lines 173 and 180 should read "Download complete." (i.e. no capitalized "C") to maintain consistency with the rest of the text. Also, lines 240, 242, and 251 should change "Presidential Security Passkey recognized, Good day, Mr. President" to "Presidential Security Passkey recognized. Good day, Mr. President" (i.e. A period after recognized instead of a comma)

8. Minor inconsistency with Martin's dialogue: If you talk to Martin Frobisher, and you tell him that you want to save him and his people but don't know how, then Martin will very sensibly tell you to blow up the reactor computer. If you should go back over the dialogue, instead of asking how to save the people, your character will say that he or she plans to save the people by blowing up the reactor computer. However, there are two places in dialog where this happens, and your character's options are only updated in one of them -- in the other one, he or she still acts ignorant and needs the instructions repeated all over again.

To fix, go to Node020 of qcMartin.ssl and change it to:

Code:
procedure Node020 begin
   if (dude_is_male) then
       Reply(180);
   else
       Reply(181);

   if (global_var(GVAR_ENCLAVE_POWER_PLANT) == PLANT_KNOWN) then
       NOption(158,Node013,004);
   else
       NOption(182,Node014,004);
   BOption(183,Node012,004);
   NOption(184,Node003,004);
end

9. Small typo in line 153 of qcMartin.msg -- the word "Okay" shouldn't be capitalized.

10. If you talk to the Elder and get her to describe to you the effects of the FEV, one of the options you can say is "That certainly was disgusting. What am I supposed to do?" (line 239). However, the Elder replies with a rather out of place "Do not touch the forcefields" speech. Instead, she should probably tell you to blow up the reactor computer. To fix this, located procedure Enc013a in ahElder.ssl and change it to the following:

Code:
procedure Enc013a begin
   Reply(237);

   NOption(238,Enc007,004);
   NOption(239,Enc007,004);
end

11. The background of the Elder during dialog makes it seem like she's still in Arroyo. Her background should probably be updated to something more appropriate.

12. There are a few minor grammatical errors in qcCurling.msg. I'll list them one by one:
Line 159 -- "Oh, your DNA, is more than..." should be "Oh, your DNA is more than..."
Line 168 -- "Why the information that you..." should be "Why, the information that you..." (thematically fits in with the way Dr. Curling speaks other similar lines)
Line 172 -- "God Bless America." should be "God bless America." (B was capitalized)
Line 178 -- This line should probably end in an exclamation mark instead of a question mark.
Line 186 -- "all ready" should be "already"
Line 191 -- "You're kind..." should be "Your kind..."
Line 208, 211 -- Remove trailing extra space at the end of these two lines.
Line 211 (again) -- "The F.E.V. toxin will only attack to humans, leaving everything else alive, better still..." should be "The F.E.V. toxin will only attack humans, leaving everything else alive. Better still..." (note that two errors were corrected: removing the unnecessary "to" and fixing comma splice at the end of the word "alive")
Line 263 -- Extra space between the words "the" and "F.E.V." (located near the end of the line.)

13. When you tell Dr. Curling that you are as human as he is (line 147 -- see Node009), he responds by claiming that your DNA is "more than just a *little* different" (line 159 -- see Node013), which is slightly disjoint given the context of the conversation. I really think the developers meant for the doctor to say line 156 (i.e. call Node012 instead of Node013), which makes much more sense as a rebuttal to the player's claim of humanity. However, Node012 is never called anywhere in Dr. Curling's script. The fix is to change the call in Node009 of qcCurling.ssl from calling Node013 to calling Node012, as thus:

Code:
procedure Node009 begin
   Reply(146);

   NOption(147,Node012,004);
   BOption(148,Node008,004);
end

14. In Node044, Dr. Curling tries to quote a verse William Blake's famous poem, The Tyger. The developers placed each line of the verse on separate lines in the msg file, and tried to reproduce the verse by concatenating the four lines together. Unfortunately, instead of each line of the verse standing on its own, they are now all written on one long line, thus marring the effect of one of the most powerful stanzas ever written in English literature.

While technically nothing is wrong, I'm sure none of us want Blake to roll over in his grave. ;) Therefore, I propose fixing this little bit by changing lines 246-249 in qcCurlng.msg to the following:

Code:
{246}{}{When the stars threw down their spears,}
{247}{}{                      And water'd heaven with their tears,}
{248}{}{                            Did he smile his work to see?}
{249}{}{                                  Did he who made the Lamb make thee?}

15. What Jeffrey Jones (voice actor for President Richardson) says and what the text in qhPrzRch.msg says doesn't quite match up in a few spots. Here they are:
-> Line 111: Change "Be a good mutant..." to "Now be a good mutant..."
-> Line 119: Change "Uh, Vault 13, I see." to simply "Ah, Vault 13."
-> Line 177: Change "A little history...." to "A, hmm, a little history...."
-> Line 218: Change "....into the stone age." to "....into the stone age. (chuckles)"
-> Line 228: Change "Vault 13 was a special case" to "Vault 13 is a special case."
-> Line 248: Change "....use our guns to kill each other, just saves us the trouble." to "....use our guns to kill each other, (snorts) just saves us the trouble."
-> Line 252: Change "It's a damn good thing..." to "And it's a damn good thing..."
-> Line 254: Change "But that's not to be." to "But (sighs) that's not to be."

16. Tracing the dialog from Node050 onwards towards Node053 yields the following result:

Code:
PRESIDENT: You can't stop it. The tests are complete and the toxin is ready for release. In hours, your villagers will be the first to make the ultimate sacrifice. The other mutants will follow. An unfortunate footnote in the continuing history of the human race.

PLAYER: Why don't we start that footnote off with your epitaph, Mr. President?

PRESIDENT: Yes, I do. Even killing me won't help you. There's nothing you can do to stop the release.

As you can see, it doesn't quite make sense, unless one inteprets "Yes, I do" as the "epitaph". (The President's reply makes much more sense coming from Node051). I'm guessing that originally, Node050 is supposed to go to Node052, but Node052 was left blank, so the developers redirected it to the next Node. Instead, I would recommend re-directing the dialog to Node056, where the dialog flow, while still awkward, is much smoother than what it is now. To do this, change Node050 to the following:

Code:
procedure Node050 begin
   Reply(265);
   NOption(266, Node056, 4);
end

17. If you try to take the President hostage, he will reply with text that definitely doesn't match up with his speech. The problem is in Node011, where the President's textual reply is actually comprised of two different lines joined together (line 145 and 146). Apparently, though, the engine responsible for playing the corresponding voice files to the lines doesn't quite like it, and only plays the voice file for line 146.

And since we're on the subject of Node011: One of the lines (line 147) indicates that the player is willing to let the President go, but the President acts as if he has been intimidated. I think it's rather obvious that the BOption call to Node012 should really be a GOption call to Node013.

The fix is relatively simple: both text pretty much say the same thing, so it boils down to which line to pick. Personally, I think that line 145 is the proper reponse to the player's hostage taking attempt, and line 146 would be response to a failed intimidation speech roll in node010 -- a speech roll that is currently not implemented at all (something for the RP, maybe?).

At any rate, if we pick line 145 to be the proper line, and we fix the line 147 reponse, then Node011 becomes:

Code:
procedure Node011 begin
   Reply(145);
   GOption(147, Node013, 4);
   NOption(148, Node020, 4);
   BOption(149, Node012, 4);
end

18. If you are dressed in Advanced Power Armor Mark II (none of the other power armors work), then the President will call you a "gallant trooper" the very first time you meet him, and ask you what you want. If you ask him what's going on, the President will rather candidly start sharing the details of the Project with you. Afterwards, if you talk to him a second time, he'll ask in a rather annoyed tone "You're back? What is it you want?"

If you are dressed in anything else other than Advanced Power Armor Mark II or a Purple Robe, then the President will treat you as a stranger and ask you for your identity. On subsequent visits, the President will continue to ask you for your identity.

If you are dressed in a Purple Robe, the President will initially assume that you're one of the doctors doing research in the Enclave(!). This is despite the fact that no one else in the Enclave is dressed in a Purple Robe (in fact, you'd be shot on sight by the robots, turrets, and guards if you're running around the Enclave dressed in a Purple Robe.)

Needless to say, there are quite a few issues with this sequence of events.

a) The President treats you as an unknown stranger if you wear something else other than a Purple Robe or the Advanced Power Armor Mark II. While this is understandable if you are not wearing power armor (no one else in the Enclave runs around in any other armor other than power armor), and perhaps even if you are wearing normal power armor (perhaps troopers in normal power armor aren't supposed to be on the Presidential Level, so anyone in normal power armor waltzing around the Presidential Level can be assumed to be an infiltrator), it doesn't quite make sense for Advanced Power Armor. Then again, I guess you can argue that normal Advanced Power Armor look different from the Mark II version, and that Mark II troopers are the only ones allowed on the Presidential Level, even though the critter protos for the Enclave guards show that they are wearing normal version. But if that's true, then presumably the guards stationed on the Presidential Level should present some sort of challenge to you instead of letting you waltz around with impunity. Regardless of how one looks at things, at the very basic level, it cannot be denied that there is some inconsistency going on.

b) Even though the President can't see your face if you're wearing power armor, somehow he knows that you've returned to talk to him again. His psychic abilities must be strong! Even better, if you're wearing something else other than Advanced Power Armor Mark II or the Purple Robe, the President will seemingly forget about you and ask you who you are all over again.

c) The Purple Robe thing is obviously part of an unimplemented feature where you can walk around the Enclave as a doctor or researcher. I am guessing that originally, Enclave researchers were supposed to be dressed in Purple Robes, but that idea was discarded. It seems like the developers forgot to remove the relevant code from the President's script.

d) If, while dressed in no armor (i.e. only in the vault suit), you ask the President who he is, he will rather indignantly claim that he's the President, and that if you "belonged here", then you should know that. There's only one small problem with this logic: if you really are part of the Vault 13 prisoners, then you most definitely do NOT "belong" there. A more appropriate response is needed.

e) Once you ask him what's going on, the President will assume that you are a mutant infiltrator wearing Advanced Power Armor Mark II, and treat you accordingly. This may be working as designed (i.e. if the trooper needed to ask what's going on, then one may safely assume that he or she really isn't part of the Enclave and hence must be an infiltrator), but the logical linkages are perhaps not as clear as they can be due to the way the dialogue is structured. This is perhaps a bit subjective on my part, I'll admit, so feel free to ignore this if you disagree with my view.

With the above in mind, we can form an integrated solution. The President will now call the player a "gallant trooper" when he or she is wearing any form of Power Armor. At the same time, the President should treat a Purple Robe wearing player the same as a total stranger (though this may be something for you to think about for your RP). We'll also assume that the President will recognize the player on subsequent dialog attempts if the player isn't wearing power armor of any form. Finally, for players in power armor having the first conversation with the President, the linkages making it clear to the player that the President recognizes him or her as a mutant infiltrator will be clarified somewhat (feel free to ignore this last part of you disagree with e) above).

Code:
procedure Node021a;
#define LVAR_Node4_Count                (12)

procedure talk_p_proc begin
   Evil_Critter:=0;
   Slavery_Tolerant:=SLAVE_TOLERANT;
   Karma_Perception:=KARMA_PERCEPTION1;

   CheckKarma;

   GetReaction;

   inc_local_var(LVAR_Start_Dialog);

   // I'm not quite sure what global variable 697 is -- it
   // certainly wasn't part of the official mapper scripts.
   // I'm guessing it's a global variable introduced to
   // control the display of the President's ending movie
   // at the end of the game.
   if (global_var(697) != 1) then
      set_global_var(697, 1);

   if (dude_is_stupid) then begin
      if (local_var(LVAR_Herebefore) == 0) then begin
         start_gdialog(NAME,self_obj,4,HEAD_PRESIDENT,BACKGROUND_PRESIDENT);
         gSay_Start;
           call Node001;
         gSay_End;
         end_dialogue;
      end else begin
         call Node003;
      end
   end else begin
      if (dude_wearing_power_armor) then begin
         if (party_size_biped == 0) then begin
            start_gdialog(NAME,self_obj,4,HEAD_PRESIDENT,BACKGROUND_PRESIDENT);
            gSay_Start;
              call Node021;
            gSay_End;
            end_dialogue;
         end else begin
            start_gdialog(NAME,self_obj,4,HEAD_PRESIDENT,BACKGROUND_PRESIDENT);
            gSay_Start;
               call Node022;
            gSay_End;
            end_dialogue;
         end
      end else dude_wearing_vault_suit begin
         if (party_size_biped == 0) then begin
            start_gdialog(NAME,self_obj,4,HEAD_PRESIDENT,BACKGROUND_PRESIDENT);
            gSay_Start;
              call Node004;
            gSay_End;
            end_dialogue;
         end else begin
            start_gdialog(NAME,self_obj,4,HEAD_PRESIDENT,BACKGROUND_PRESIDENT);
            gSay_Start;
               call Node022;
            gSay_End;
            end_dialogue;
         end
    //end else if (WEARING_DISGUISE) then begin
    //   if (party_size_biped == 0) then begin
    //      start_gdialog(NAME,self_obj,4,HEAD_PRESIDENT,BACKGROUND_PRESIDENT);
    //      gSay_Start;
    //        call Node005;
    //      gSay_End;
    //      end_dialogue;
    //   end else begin
    //      start_gdialog(NAME,self_obj,4,HEAD_PRESIDENT,BACKGROUND_PRESIDENT);
    //      gSay_Start;
    //         call Node022;
    //      gSay_End;
    //      end_dialogue;
    //   end
      end else begin
         start_gdialog(NAME,self_obj,4,HEAD_PRESIDENT,BACKGROUND_PRESIDENT);
         gSay_Start;
            call Node022;
         gSay_End;
         end_dialogue;
      end
   end

   inc_local_var(LVAR_Herebefore);
end

procedure Node004 begin
   if (local_var(LVAR_Herebefore) == 0) then begin
      Reply(119);
      BOption(120, Node019, 4);
      NOption(121, Node020, 4);
      NOption(122, Node006, 4);
   end else begin
      Reply(183);
      BOption(125, Node019, 4);
      NOption(188, Node020, 4);
      NOption(191, Node023, 4);
   end
end

procedure Node021 begin
   Reply(182);
   if (local_var(LVAR_Node21_Count) == 0) then begin
      inc_local_var(LVAR_Node21_Count);
      BOption(120, Node015, 4);
      NOption(185, Node999, 4);
   end else begin
      NOption(338, Node021a, 4);
      NOption(185, Node999, 4);
   end
end

procedure Node021a begin
   Reply(183);
   NOption(184, Node020, 4);
   NOption(165, Node999, 4);
end

procedure Node022 begin
   if (local_var(LVAR_Herebefore) == 0) then begin
      if (party_size_male + party_size_female == 0) then
         Reply(186);
      else
         Reply(187);
   end else
      Reply(183);
   NOption(188, Node020, 4);
   BOption(189, Node012, 4);
   if (local_var(LVAR_Herebefore) == 0) then
      BOption(190, Node019, 4);
   else
      BOption(125, Node019, 4);
   NOption(191, Node023, 4);
end

Note that I've created a new LVAR (LVAR_Node4_Count, though I suppose you use LVAR_Node5_Count since I've now commented out the disguised doctor dialog), plus a new procedure Node021a. Line 338 (referenced in Node021) should go something like: "Actually, Mr. President, I'm back."

19. This may be stuff that is more appropriate for the RP, but I'll list the problem here and let you make the decision.

If you have met the vice president before speaking to the president, then in Node015 you are supposed to have a dialog option which leads to the president discussing the vice president's role in the Project. Unfortunately, in a normal game one can never access this branch of dialog. Why? Whether or not the player has met the vice president is kept track of by a flag named "met_vice_prez", but almost right at the very beginning of the file ENC.H, "met_vice_prez" is defined as "(false)". Hmmm...

There are several possible solutions, but perhaps the simplest way is to define a new MVAR in ENCPRES.H (there's currently only one there), and set the state of the MVAR to 1 if the player has met the vice president and to set it back to zero if the player kills the VP. This way, if the player has met the VP AND hasn't lost his/her temper and blew his brains out, he/she can talk to the President about him.

20. There are some minor miscellaneous errors in qhPrzRch.msg that need to be fixed:
-> Lines 160, 176: Extra space between the last sentence and next-to-last sentence.
-> Lines 172, 224, 280: Extra space at the end of line.
-> Line 207: Extra space between "why" and "did".
-> Line 210: "So what." should be "So what?"
-> Line 227: "it's" should be "its"

21. In corrections.txt, you state that:

Convincing Murray to shut down the reactor, no longer causes him to still say "What's the alarm ringing about?"

However, this is not true. Murray still acts clueless about what's going on.

The problem lies in qcMurray.ssl. Murray only gains awareness of what's going on if GVAR_ENCLAVE_COMPUTER == COMPUTER_DESTROYED. However, other than in the header file GLOBAL.H and Murray's script, this particular GVAR isn't mentioned (let alone manipulated) at all. The obvious fix is to go to Node013 of qcMurray.ssl and set the global variable to an appropriate value, as thus:

Code:
procedure Node013 begin
   set_global_var(GVAR_ENCLAVE_REACTOR,ENCLAVE_REACTOR_OFF);
   if (global_var(GVAR_ENCLAVE_COUNTDOWN) == 0) then begin
       set_global_var(GVAR_ENCLAVE_COUNTDOWN,game_time);
       give_xp(EXP_DESTROY_REACTOR_TALK);
   end
   set_global_var(GVAR_ENCLAVE_ALARM,ALARM_REACTOR);
   set_global_var(GVAR_ENCLAVE_COMPUTER,COMPUTER_DESTROYED);

   Reply(153);

   GOption(154,Node013a,004);
   BOption(155,Node998,004);
   NOption(156,Node008b,004);
end

For the sake of consistency, you may also want to toggle this variable in qiReactr.ssl, since it makes sense that Murray would have some sort of monitoring device at his desk and ought to know that something is very wrong with the reactor control computer once you had blown it up.

22. Finally, for something not related to the Enclave computer terminals: When you blow up the reactor's controlling terminal, if you or any party members are standing too close to the reactor, then you'll take electrical damage. However, for some odd reason K-9, Dogmeat, the Pariah Dog, Laddie, and any inferior versions of the Brain Bot will not be affected by the electrical damage. Why? Because the code makes no such check. The fix is to go to qiReactr.ssl and add the appropriate checks for the neglected party members in procedure damage_p_proc, as thus:

Code:
procedure damage_p_proc begin
   if ((weapon_dmg_type(target_obj) == DMG_explosion) and (map_var(MVAR_Reactor_Off) == 0) and (global_var(GVAR_ENCLAVE_REACTOR) < ENCLAVE_REACTOR_OFF)) then begin
       set_map_var(MVAR_Reactor_Off,1);
       set_global_var(GVAR_ENCLAVE_REACTOR,ENCLAVE_REACTOR_OFF);
       if (global_var(GVAR_ENCLAVE_COUNTDOWN) == 0) then
           set_global_var(GVAR_ENCLAVE_COUNTDOWN,game_time);
       set_global_var(GVAR_ENCLAVE_ALARM,ALARM_REACTOR);
       display_msg(g_mstr(1011));
       give_xp(EXP_DESTROY_REACTOR_COMPUTER);

       ShockPerson(dude_obj);
       ShockPerson(Vic_Ptr);
       ShockPerson(Myron_Ptr);
       ShockPerson(Marcus_Ptr);
       ShockPerson(MacRae_Ptr);
       ShockPerson(Sulik_Ptr);
       ShockPerson(Lenny_Ptr);
       ShockPerson(Cyberdog_Ptr);
       ShockPerson(Doc_Ptr);
       ShockPerson(Goris_Ptr);
       ShockPerson(Davin_Ptr);
       ShockPerson(Miria_Ptr);
       ShockPerson(Robobrain_Ptr);
       ShockPerson(Dogmeat_Ptr);
       ShockPerson(Pariah_Dog_Ptr);
       ShockPerson(K9_Ptr);
       ShockPerson(Robobrain_Human_Ptr);
       ShockPerson(Robobrain_Abnormal_Ptr);
       ShockPerson(Robobrain_Chimp_Ptr);
       ShockPerson(Laddie_Ptr);
   end
end

Note also that it is possible for some non-party members to be in blast range, but since they are not party members, they wouldn't be shocked in the explosion. To include them in the damage you'll need to write something up similar to my modified code for the brain extraction room in the SAD.

23. If you try to talk to Murray while dressed in power armor, you get some dialog strongly implying that troopers in power armor are not permitted to be in his office. This is funny, since standing right in front of Murray is a power armored trooper!

My guess is that this bit of code is remnants of the unimplemented disguise-yourself-as-a-doctor feature (see Bug #18, especially my comments in part c)). I would recommend commenting out the relevant conditional ((dude_wearing_power_armor) and (part_size == 1)) in talk_p_proc of qcMurray.ssl.

24. There are quite a few GOption calls in Frank Horrigan's script. Not that it really matters much at this stage of the game, but I think they really should be NOption calls instead.

25. When you try to plead to Frank Horrigan to talk things over (3 different ways the player can do this), he usually responds with "We just did. Time for talking's over." However, for one of the options, he skips past this (un)pleasantry and attacks you right away. To maintain thematic consistency, Frank should say his line first before attacking. To correct this, go to Node004 of qcFrank.ssl and change it to the following:

Code:
procedure Node004 begin
   if (global_var(GVAR_ENCLAVE_ALARM) == ALARM_TOXIN) then
       Reply(115);
   else
       Reply(116);

   BOption(117,Node998,004);
   NOption(118,Node005,004);
   BOption(135,Node998,004);
end

26. Here's a bug that I wouldn't have dreamed of discovering if it wasn't for one lucky break. Anyway, here's what happened in my game: As part of my experimenting, I was fighting Sergeant Granite and his merry men, including big Frank Horrigan, using only the turrets and my party members as support. In the course of the fight, Myron was very badly injured (1 hp left!), and tried to retreat. Luckily, my next shot killed Horrigan, and I used my remaining AP to shoot the head off Horrigan's upper torso. Now, I was in sneak mode, and I had totally forgotten about Granite's surviving men. I guess I must have been out of enemy detection range since the game allowed me to end combat. I exited combat, tried to run to Myron to heal him with stimpacks, only to be thrown right back into combat as I exited sneak mode. One of Granite's men, the one with the Laser Gatling, opened up on me. I was fine in my Advanced Power Armor Mark II, but unfortunately, it seems that Myron was in the area of fire. Needless to say, he was promptly killed.

On a whim, instead of reloading, I decided to mop up the rest of Granite's squad, exit the Enclave and see the ending movies anyway. Imagine my surprise when the ending movie claimed that Myron died a year later in Den! Funny, I could have sworn he died in combat the Enclave... Subsequent experimentation with Myron and Marcus (by the much more expedient method of shooting them directly) shows that their ending movies are played even though they had died in the Enclave. It took me a little bit to track down what went wrong.

Anyway, the cause of this bug is due to the fact that the global variables controlling the display of the Myron and Marcus custscene are set on Horrigan's death. In the meantime, though, if either of them should die after Horrigan's death but before the player manages to get the heck out of dodge, then the custscene is still set, and is still played at the end of the game. While this scenario is admittedly highly unlikely, as I had outlined in my personal experience above, it is not utterly impossible.

To fix this, I would move the code determining whether or not to show Marcus' or Myron's cutscene entirely out of Frank's script and into the respective characters' scripts. Toggle the movie to be played as soon as Marcus joins the player's party, and as soon as the player had talked to Myron. Unset the variable in the event of either's unfortunate demise.

27. Currently, if the player successfully obtained fuel for the Hubologists' shuttle at any point in the game, they are treated to one of two random endings in which the Hubologists basically suffocate to death once in orbit. Otherwise, an ending is shown where the Hubologists blow themselves up trying to launch the shuttle using a "cheap derivative fuel". There are a couple of issues with this.

a) The logic for displaying the Hubologist cutscene does not take into account the fact the either Badger or Dave H. could redirect the fuel from the shuttle to the tanker. If the shuttle was emptied of its fuel, then the cheap fuel scenario should very logically take place instead of the suffocate in orbit scenario. This should be the case for most "normal" gameplay. In fact, the only way the Hubologists could have fuel in their shuttle at the very end of the game is for the player to purposely make his/her character stupid and get Matt or AHS-9 to fix up the tanker for him/her. In all other circumstances, the fuel must end up in the tanker one way or the other, to the exclusion of the shuttle.

b) While the two suffocation endings are similar in that it assumes that the shuttle has fuel, there's a reason why there's two of them. One scenario (faulty air seal) is there if the player doesn't deliver the vertibird plans to the Hubologists. The other scenario is there if the Hubologists do have access to the plans (i.e. thanks to the plans, they can locate and fix the faulty air seals, but then they forgot about the recycled air).

c) If the player massacares the Hubologists in San Francisco, should the Hubologist ending still be shown? I mean, their leadership has suffered a serious decapitation strike, so I don't know who would be around to launch the shuttle. I guess one can always argue that the Hubologists you randomly encounter out in the wastes eventually gather together to try and launch. In my suggestion below, I have left this particular point alone, but you'll need to make the obvious adjustments if you feel that there should be no Hubologist ending in the event of a massacare.

To fix this, we need to rework the code processing the Hubologists endings to something more suitable. Unfortunately, this is a bit more complicated than it seems: there is no global variable keeping track of the exact state of the Hubologist's fuel situation. And as indicated above, it is possible for the player to get fuel for both the tanker and the shuttle quite legitimately, so simply keeping track of the tanker's fuel status along with the shutter's fuel status isn't enough. Therefore, either have to create a new global variable, or else use the existing GVAR_SAN_FRAN_ELRON_GAS_QST, and set it to 3 in the event that you transfer the gas out of the shuttle and into the tanker -- in this latter case, Badger's, Dave H.'s, and the Hubologist computer's scripts will need to be updated in order to accurately reflect the state of the Hubologist fuel quest. Assuming that this is done, then the code for determining that end game cutscene becomes pretty simple:

Code:
    if (global_var(GVAR_SAN_FRAN_ELRON_GAS_QST) != 2) then
      set_global_var(GVAR_ENDGAME_SAN_FRAN_MOVIE_ELRON,1);
    else begin
      if ((global_var(GVAR_SAN_FRAN_VERTI_ELE_QST) == 2) or (global_var(GVAR_SAN_FRAN_VERTI_STEAL_SHI_QST) == 2)) then
        set_global_var(GVAR_ENDGAME_SAN_FRAN_MOVIE_ELRON,2);
      else
        set_global_var(GVAR_ENDGAME_SAN_FRAN_MOVIE_ELRON,3);
    end

Note that you also no longer need variable k, since you are no longer making a random choice. :)

28. What Michael Dorn (voice actor for Frank Horrigan) says and what the text in qcFrank.msg says doesn't quite match up in a single spot. Here it is:
-> Line 116: Change "Making our reactor melt-down means things are going..." to "Making our reactor melt-down means that things are going..."

-- The Haen.
 
After playing FO2 off and on for the past 8 years or so pretty much as-is, I recently decided to have another go at it with one of the latest patches (mods?). According to the post on Bethesda's forum about this which says the Restoration Project contains all of Killap's patch as well I decided to go with that.

So It's Fallout 2 WITH the Restoration patch installed. I'm only so far into it but it's a great upgrade as far as I can tell.

PROBLEM --

I'm at the part where I've killed Metzger and his crew and have travelled with Sulik and vic over to the new slaver compound to the southwest. I've killed all the slavers there but when I try and free Sulik's sister the game crashes. Every time. I've tried it every which way choosing every option available but every time it's crash city.

Any advice?
 
Just an addendum to the above problem really, but every time I try to enter the tribal village on the coast (Sulik's home?) my game crashes there too.

I've since headed east and have entered Modoc just fine, am doing some quests there now, no troubles noted as yet.

Any help or advice is greatly appreciated.
 
Arasteele said:
Just an addendum to the above problem really, but every time I try to enter the tribal village on the coast (Sulik's home?) my game crashes there too.

I've since headed east and have entered Modoc just fine, am doing some quests there now, no troubles noted as yet.

Any help or advice is greatly appreciated.

This belongs in the RP thread and not the unofficial patch thread. Once we get this sorted out, I will move this posts out of here.

Are you by chance running Windows 98 (or ME)? A crash with the Primitive Tribe was a common problem for this OS. In any event, try and download this file and replace the old one found in ../Fallout2/data/maps with it.

Let me know what happens.
 
You nailed it, I'm running all the FO games on an old computer with Windows ME. They won't run or even install on my regular machine.

Your replaced file worked perfectly, thank you. I opened up a previous save and tried rescuing the slaves and also leaving the slave camp and just travelling to the coastal village and entering it and both worked.

Apologies for posting this in the wrong thread, it's a little hard sometimes for us part-time gamers to know where the best place for a topic is on a busy forum like this so I'll leave the organization and placement of it in your capeable hands.

Thanks again. :clap:
 
AFAIK, with the development of RP 1.3, you fixed plenty of vanilla bugs, including the too many items bug, but right now these fixes are not included in the latest released version of the unofficial patch. Am I right? If yes, when will they be released? Don't worry about giving me incorrect release dates, just note if you think the date could be incorrect.
 
Three little bugs that I stumbled across. Relatively minor stuff.

-----

1. In the end movie cutscenes, the Wrights are said to have violently taken over New Reno using pre-war technology, even if you had that little accident with the virus container in the Sierra Army Depot.

On a similar note, if you found the map to the SAD in Sam Pritchard's grave, but don't interact with the Wrights at all, then if you wiped out the other families you will get the Wrights seizing power using pre-war technology. Though in this case, I guess one can argue that the Wrights occasionally send someone to the SAD to scope out or try to breach the place, and they get a pleasant surprise when they discover that someone managed to do the hard work for them...

To fix the first part, simply go to qcFrank.ssl and change:

Code:
         if (sad_got_in) then begin
            set_global_var(GVAR_ENDGAME_MOVIE_RENO, 8);

to

Code:
         if ((sad_got_in) and not (sad_contaminated)) then begin
            set_global_var(GVAR_ENDGAME_MOVIE_RENO, 8);

If you want to fix the Pritchard thing (though like I pointed out above, this can be "explained" away), then change the code to:

Code:
         if ((sad_done) and not (sad_contaminated)) then begin
            set_global_var(GVAR_ENDGAME_MOVIE_RENO, 8);

2. If you really mess up with the security terminal on level 1, it will lock you out with a message telling you that your access to the terminal hs been terminated. However, it seems that this lockout extends to the security terminal on level 2 as well, even though the message implies that only the level 1 terminal was locked out. This effect can the duplicated in reverse (i.e. mess up on the level 2 terminal, then try to access the level 1 terminal.) The reason this is occuring is because both terminal uses the same global variable, GVAR_SIERRA_LOCKOUT, to keep track of the lockout status. So messing up in one spot produces unexpected results in the other terminal.

There are a few ways to fix this, but I would go for one of two solutions. The first one is to assume a continuity error: the developers did want to lock out both terminals, but the text was too ambiguous. In this case, we need to modify the .msg files to something more appropriate, maybe by adding the sentence "Depot lockdown protocols are now in effect." The relevant lines are line 139 in wsterm1b.msg and lines 142 and 144 in wsterm2a.msg.

The second way is to treat GVAR_SIERRA_LOCKOUT as a pseudo-bit variable in order to keep track of each terminal without having to create a new variable. This can be done by making a few changes to wsterm1b.ssl and wsterm2a.ssl. For wsterm1b.ssl, change the code in Node015 from:

Code:
   set_global_var(GVAR_SIERRA_LOCKOUT,1);

to:

Code:
   set_global_var(GVAR_SIERRA_LOCKOUT,global_var(GVAR_SIERRA_LOCKOUT)+1);

and change the code in talk_p_proc from:

Code:
   else if (global_var(GVAR_SIERRA_LOCKOUT) == 1) then begin

to:

Code:
   else if ((global_var(GVAR_SIERRA_LOCKOUT) == 1) or (global_var(GVAR_SIERRA_LOCKOUT) == 3)) then begin

For wsterm2a.ssl, change the code in Node015 and Node016 from:

Code:
   set_global_var(GVAR_SIERRA_LOCKOUT,1);

to:

Code:
   set_global_var(GVAR_SIERRA_LOCKOUT,global_var(GVAR_SIERRA_LOCKOUT)+2);

and change the code in talk_p_proc from:

Code:
   else if (global_var(GVAR_SIERRA_LOCKOUT) == 1) then begin

to:

Code:
   else if ((global_var(GVAR_SIERRA_LOCKOUT) == 2) or (global_var(GVAR_SIERRA_LOCKOUT) == 3)) then begin

3. If you tried to hack the password terminal on level 1 of the Sierra Army Depot, but fail, then a second skill check is made (see Node014 of wsterm1a.ssl). If you succeed in the second skill roll, then you get the message "Your ineptness has caused you to set off the alarm system." However, no alarm states of any kind is actually set, and assuming you didn't set off the alarm elsewhere you will still be fine. Along the same lines, if you fail your second skill roll, you get the message "It's no use, the program is just too complicated for you to understand." [sic] However, in this effect, the alarm is tripped, though the text doesn't quite convey this impression...

It's quite obvious that the text for a successful and failed second skill check was somehow swapped around. You can go into wsterm1a.ssl and swap the line numbers in Node014, but an even easier fix (without the need to go through re-compiling) is to go to wsterm1a.msg and swap the contents of lines 137 and 138. While we're at it, we might as well fix "It's no use, the program is just too complicated for you to understand." to "It's no use. The program is just too complicated for you to understand." (comma splice).

-----

Cheers,

-- The Haen.
 
I'm having an odd issue with the game. Installed the latest version of Killap's patch, using Windows XP Pro SP3, anyway...
The problem is, every time I try to get into trapper town, I get
the instruction at 0042d965 referenced memory at 0000018c the memory could not be read from
It is very frustrating!
 
Sorry for the newbie question. Just wanted to ask: Can you use the unofficial patch with the High Resolution mod? I'm askin because I applied unofficial patch first then the High Resolution mod which patched the .exe. Does the unofficial patch still work when the .exe is patched?
 
Hi Killap, I have noted what seems to be a small problem in Navarro running your FO2 patch. When meeting the sergeant, he orders the Chosen One to report to supply to get a suit of advanced powered armor and report back. When you report back, the sergeant puts you on guard duty in front of the vertibird hanger. According to the game guides, this guard duty is supposed to last 6 hours, then the sergeant relieves you and you're free to move around after that. Under your patch, the term of guard duty never ends. You can't "sleep" at that location (which the Interplay game guide says you can). I have tried bringing books for the PC to read to make game time pass quickly. I have even left the game running on the computer for up to 36 hours. This guard duty never ends. Is this something you are aware of? Will there be any further updates to this patch?
 
Richwizard said:
Hi Killap, I have noted what seems to be a small problem in Navarro running your FO2 patch. When meeting the sergeant, he orders the Chosen One to report to supply to get a suit of advanced powered armor and report back. When you report back, the sergeant puts you on guard duty in front of the vertibird hanger. According to the game guides, this guard duty is supposed to last 6 hours, then the sergeant relieves you and you're free to move around after that. Under your patch, the term of guard duty never ends. You can't "sleep" at that location (which the Interplay game guide says you can). I have tried bringing books for the PC to read to make game time pass quickly. I have even left the game running on the computer for up to 36 hours. This guard duty never ends. Is this something you are aware of? Will there be any further updates to this patch?
This has never been in the game (unpatched or otherwise). There is nothing in drill sergeant Dornan's script and text file about this (and no speech file either). It may have been planned at some stage and then scrapped, or then Matt Norton (official game guide) remembers wrong. Again :P
I wouldn't mind seeing this implemented, but if so that would probably be better suited for the Restoration Project.

I can't really answer for killap, but I know there will be at least one more update of the patch.
 
Back
Top