FO2: Can't repair the generator at the Military Base

Cycloptis

First time out of the vault
Hi, I'm currently at the Military Base in Fallout 2 (the one from FO1) and I've cleaned out the first floor. I know I'm supposed to repair the generator so that the elevator works, and that I need at least 50% in my Repair skill to do so.

According to Per's guide, I can supplement my current repair skill (currently at 31%) with a tool (+20%). I keep using the tool or my repair skill on the generator in all sorts of combinations, but it just gives me the same message that's it's broken or some blabber like that.

Is this just another way of telling me I failed to repair it? Do I need a better repair skill?

EDIT: Sorry, I had to leave in a hurry. I'm running version US version 1.02. The exact message I get when I apply my repair or tool onto it is: "Yup, it's broken. Kicking it doesn't seem to work."
 
Well, I just took a quick look at the script and yes, a tool can be used to improve your chance. The way it is set up, however, even if you have repair at 49 and use a tool, you still won't be able to fix it. Here is the code that is run.

Code:
procedure use_obj_on_p_proc begin 
... 
      if (has_skill(source_obj,SKILL_REPAIR) < 50) then begin 
         display_msg(mstr(104)); 
      end else if (skill_success(source_obj,SKILL_REPAIR,TOOL_BONUS)) then begin

As you can see, the first line is read and the game sees that you have less than 50 repair, so it displays the message that you are unable to fix it. The problem is that the tool is therefore never factored into this at all. This definitely looks like a bug to me.

I had a bit too much to drink at the moment so I shall look into this later tomorrow.

Perhaps the first repair check should be removed...or at least some edit to the value it checks....
 
killap said:
Well, I just took a quick look at the script and yes, a tool can be used to improve your chance. The way it is set up, however, even if you have repair at 49 and use a tool, you still won't be able to fix it. Here is the code that is run.

Code:
procedure use_obj_on_p_proc begin 
... 
      if (has_skill(source_obj,SKILL_REPAIR) < 50) then begin 
         display_msg(mstr(104)); 
      end else if (skill_success(source_obj,SKILL_REPAIR,TOOL_BONUS)) then begin

As you can see, the first line is read and the game sees that you have less than 50 repair, so it displays the message that you are unable to fix it. The problem is that the tool is therefore never factored into this at all. This definitely looks like a bug to me.

I had a bit too much to drink at the moment so I shall look into this later tomorrow.

Perhaps the first repair check should be removed...or at least some edit to the value it checks....
I doubt it, actually. Perhaps you need the 50% repair to know where to begin repairing in the first place, after which you can use a tool to make it easier.
 
No, taking another look, it seriously looks flawed. Here is the entire segment of code if anyone is interested.

Code:
procedure use_obj_on_p_proc begin
if ( (not(Generator_Fixed)) and ((obj_pid(obj_being_used_with) == PID_MULTI_TOOL) or (obj_pid(obj_being_used_with) == PID_SUPER_TOOL_KIT)) ) then begin
      script_overrides;
      if (has_skill(source_obj,SKILL_REPAIR) < 50) then begin
         display_msg(mstr(104));
      end else if (skill_success(source_obj,SKILL_REPAIR,TOOL_BONUS)) then begin
         set_base_power;
         display_msg(mstr(108));
         base_lighting;
         if (local_var(LVAR_Gave_Xp) == 0) then begin
            display_mstr(200);
            give_xp(EXP_MILITARY_BASE_FIX_GENERATOR);
            set_local_var(LVAR_Gave_Xp,1);
         end
      end else begin
         inc_local_var(LVAR_Failed_Attempts);
         if (local_var(LVAR_Failed_Attempts) == 1) then
            display_msg(mstr(105));
         else if (local_var(LVAR_Failed_Attempts) == 2) then
            display_msg(mstr(106));
         else
            display_msg(mstr(107));
      end
   end
end

These are all if else if statements, so after the game sees that the player has less than 50 repair, it stops and looks no further. This code is exactly the same as what is run when just the repair skill is used, so I am thinking they just copy pasted and moved on.

Perhaps this is actually not a bug but rather the developers did not want anyone with less than 50 repair to be able to fix this. Then what is the point of tools I suppose...
 
Ah yes, now it does look flawed. Since they first check to see whether the person is using a tool at all.

Ah well, another bug for you to squash.
 
Well is it really a bug? I mean perhaps they only wanted people with >50 repair to fix the thing. As far as I know, tools only help because during the (skill_success(source_obj,SKILL_REPAIR,TOOL_BONUS) the specific tool bonus is factored in. Tools don't inherently help with repairs, right? (meaning they aren't done through the engine but only through scripts) At least this is what I have learned from the work I have done with Fallout.

I suppose the only fix needed for this is to just remove
Code:
if (has_skill(source_obj,SKILL_REPAIR) < 50) then begin  
         display_msg(mstr(104));

and just have it go straight to the skill check factoring in the use of a tool.

Perhaps Per would give a good suggestion here...
 
killap said:
Well is it really a bug? I mean perhaps they only wanted people with >50 repair to fix the thing. As far as I know, tools only help because during the (skill_success(source_obj,SKILL_REPAIR,TOOL_BONUS) the specific tool bonus is factored in. Tools don't inherently help with repairs, right? (meaning they aren't done through the engine but only through scripts) At least this is what I have learned from the work I have done with Fallout.
If they didn't want to have the tool factor in with whether or not it would be possible at all, then why did they check for tool bonus at all:
Code:
if ( (not(Generator_Fixed)) and ((obj_pid(obj_being_used_with) == PID_MULTI_TOOL) or (obj_pid(obj_being_used_with) == PID_SUPER_TOOL_KIT)) )
I assume there's a complementary statement for when they're not using a tool.
Of course, I'm not entirely familiar with the scripting, so I'm not sure whether "skill_success(source_obj,SKILL_REPAIR,TOOL_BONUS)" would give 0 TOOL_BONUS if you're not using a tool.

I suppose the only fix needed for this is to just remove
Code:
if (has_skill(source_obj,SKILL_REPAIR) < 50) then begin  
         display_msg(mstr(104));

and just have it go straight to the skill check factoring in the use of a tool.

Perhaps Per would give a good suggestion here...
Probably, yes. Or perhaps change the 50 to 30 to still reflect that you need to have a certain skill level, but that the tool is factored into that.
 
Actually, my initial thought was the same as Sander's first idea, that you need 50% to even understand what you're going about, then if you have a Tool you get a bonus. Not consistent with other parts of the game, but this game was never consistent about anything anyway. TOOL_BONUS is a constant that gets added to your skill level for the check. I could be wrong, but I think killap added the Super Tool Kit bit in a previous fix. You may want to finalize that fix by giving the proper (higher) bonus if that is used. I feel like we're in the wrong forum...
 
Per said:
I could be wrong, but I think killap added the Super Tool Kit bit in a previous fix. You may want to finalize that fix by giving the proper (higher) bonus if that is used. I feel like we're in the wrong forum...
Yes, I did add the super tool kit in a previous fix run.

As for the issues at hand...

Checking for at least >50 repair makes sense when using a skill on the machine so that the player can understand what needs to be done. Having this same check under the use object (ie use a tool) procedure does not. As you can see from the code, even if you have repair at 49 and use a tool, you still cannot fix the machine since the initial if statement prevents you from going on. I feel that the best solution is to remove the
Code:
if (has_skill(source_obj,SKILL_REPAIR) < 50) then begin 
         display_msg(mstr(104));
part from the use_object procedure and have it go straight to the skill roll. This way those with lower repair can still attempt to repair with the hopes that the tool will give the needed edge during the skill roll. At the moment no matter how many times one uses the tool on the machine (and the player has repair <50) he will ALWAYS get the message that "Yup, it's broken. Kicking it doesn't seem to work."
 
killap said:
Checking for at least >50 repair makes sense when using a skill on the machine so that the player can understand what needs to be done. Having this same check under the use object (ie use a tool) procedure does not. As you can see from the code, even if you have repair at 49 and use a tool, you still cannot fix the machine since the initial if statement prevents you from going on.

I'm not sure you see what we're getting at. This is exactly the effect we (or I) want (or guess the designers were going for, or think makes enough sense that it doesn't need changing anyway). Approaching the machine with a tool in your hand, you still need to actually know how it works, so you know where to apply the tool. The tool doesn't jump from your hand to where it needs to be used. It would have made perfect sense to apply such a minimum skill level check for all Repair checks like this, if they had bothered to synchronize their scripters.
 
No, I think I'm on the same level as you guys. (but attempting to correct something that is not broken)

I suppose this now brings me back to one of my previous posts in this thread. The fact that this is not actually a bug but rather the player NEEDS to have repair >50 to actually fix it. Anything less will tell them that hey, yeah this is broken but you cannot do anything about it at the moment.

Ergo, I was lead astray (by the initial poster) into thinking this was some glitch but in fact all is well and the only problem is that the developers seriously needed to sync their work.
 
I am hijacking this old thread because I have the same problem. It's all good and interesting to read about the code but I have been stuck in this game for a while now. Is there any way to get past this elevator without having the repair skill? I can't use Vic either as he is dead in my game...

Thanks.
 
Yankee said:
I am hijacking this old thread because I have the same problem. It's all good and interesting to read about the code but I have been stuck in this game for a while now. Is there any way to get past this elevator without having the repair skill? I can't use Vic either as he is dead in my game...
As is said multiple times in this thread, no.
 
Sander said:
Yankee said:
I am hijacking this old thread because I have the same problem. It's all good and interesting to read about the code but I have been stuck in this game for a while now. Is there any way to get past this elevator without having the repair skill? I can't use Vic either as he is dead in my game...
As is said multiple times in this thread, no.
You said there was no way to get around the repair but not that there wasn't another way to get to the next level :). I guess I will start over then. Thanks.
 
Start over? How about:

1. Levelling up and using skill points

2. Scavenging for Repair books

3. Moving on with the game

It's an open-ended RPG, not some old Sierra adventure where you'll die four hours into the game if you didn't click the pink pixel on the second screen that you can't go back to.
 
Per said:
... not some old Sierra adventure where you'll die four hours into the game if you didn't click the pink pixel on the second screen that you can't go back to.

It sounds like you're speaking from experience :rofl:
 
Oh yeah, beware of this bug, the game allowed me to go to level 1 w/o being able to repair the generator, and after crushing the mutants, there was no way to get back using the elevator, since it didn't work. My last save game was so far away it was not even funny.
 
Back
Top