BGforgeNet/Fallout2_Unofficial_Patch

Using crowbar to open locks

Closed this issue · 5 comments

This isn't really a bug report, just some thoughts ...

I kinda feel like using the crowbar to open any lock makes the lockpick skill completely useless. My character has 8 STR, and since the very beginning of the game, I literally open every single lock with the first crowbar I've found in Klamath. This seems incredibility overpowered to me. If at least there would be a higher chance to fail more and damage yourself, or you destroy the crowbar, etc. it might be different, but the way it is right now, I would be stupid to not keep using it.

In a way, the game was better when using the crowbar was bugged. :D

/Edit: This SAD door is the first one that apparently can't be opened with the crowbar.
scr00007
(from RPU, but I blindly assume it's the same in UPU :x )

But you're not getting the XP! That alone is enough to stop an obsessive type.
And there's a chance to damage yourself.

I'm literally breezing through SAD with just using crowbar on everything that is locked. Doing that for the whole game and never had a crit fail. Sometimes I have to use the crowbar twice, but that's as bad as it gets.

Didn't even noticed diminishing xp. I'm level 14 now and seem to be doing fine. :>

Stat_Roll:=do_check(source_obj,STAT_st,Crowbar_Bonus);

int do_check(ObjectPtr who, int check, int modifier)
Do a check/test-roll versus one of the various basic traits (strength, perception, etc.). Note: these cannot generate Critical Success or Critical Failure as they are a basic X==Y check.

Looks like criticals don't work for stat checks, only skill checks.
Crowbar_Bonus is 0 by default. If I understand correctly, the result is that the check is that STR > 0 =).
Or is it an actual roll?

$ grep -R Crowbar_Bonus scripts_src/
scripts_src/generic/ziwoddor.ssl:#define Crowbar_Bonus                   (0)
scripts_src/generic/ziwoddor.ssl:  Stat_Roll:=do_check(source_obj,STAT_st,Crowbar_Bonus);
scripts_src/headers/doors_containers.h:#ifndef Crowbar_Bonus
scripts_src/headers/doors_containers.h:  #define Crowbar_Bonus                   (0)
scripts_src/headers/doors_containers.h:    Stat_Roll:=do_check(source_obj,STAT_st,Crowbar_Bonus);
scripts_src/navarro/cstouch.ssl:   //Stat_Roll:=do_check(source_obj,STAT_st,Crowbar_Bonus);
scripts_src/vault15/bselev.ssl:#define Crowbar_Bonus                   (-200)

But for some reason bselev uses value of -200??
Does it mean that do_check actually rolls something after all? Maybe random(1, STR) > modifier?

Edit: looking at CE source, it's rolling d10, then checks is roll_result <= (STR+mod).

I thought prying was added by killap as #61 said, but I checked vanilla files, and it's actually there too, so it's an original feature.
I fixed chance to strain back on critical failure, and in addition introduced a separate chance to destroy the crowbar (more likely to happen with metal doors/containers)

As usual, pull a thread and the whole thing starts to unravel...
The critical perception check branch wouldn't work, of course, since stat checks don't generate criticals. Added a workaround for that, did some more cleanup and consolidation. Hopefully didn't screw up anything, pretty tired of that now.

Just fyi, if you pull prying changes into 1in2, the breaking algo is just something I came up with on the fly. Since pry never worked, we have some leeway in how exactly to implement it.

The whole codebase needs to be reexamined for is_critical checks checking stat rolls. From a quick look, there's a few.
I wonder if it makes it more sense to just fix it in sfall to allow criticals.