I was going through the RP 1.2 kcsulik.int script for reasons of my own and found a few things that may need attention. For the most part it's not clear whether these issues are bugs or only seem like such due to my limited understanding of the FO2 scripting language. I use Noid's compiler/Ruby to work with Fallout scripts, so all the script lines quoted below will be in that (expansive) format.
1) There's an obviously bad line in Node054:
Code:
if (op_global_var(233)) then
begin
end
If global_var(233), er, is...? I'm guessing it should be "==1," based on a few lines line in Global.h, but I couldn't find the exact info on how this variable tracks the stages of the GECK quest while writing these notes.
2) Shouldn't the section:
Code:
procedure description_p_proc
begin
op_script_overrides();
op_display_msg(op_msg_string(383, 101));
end
instead be:
Code:
procedure description_p_proc
begin
op_script_overrides();
op_display_msg(op_msg_string(383, 102));
end
?
3) The way I'm reading "procedure talk_p_proc," there seem to be some problems with the reaction calculations (of course, it could just be that I'm not properly understanding the whole process), which could be doubly important if the problems are in the header files used by the project (which means many scripts would have to be recompiled).
The first/biggest issue here looks like it starts right after the Sex Appeal check. Reaction is adjusted if self_obj is an evil critter (which Sulik isn't, but that's probably beside the point if it's all in a header file), and then in a separate subsection reaction is adjusted if self_obj is a good critter. The way I'm reading these two sections, the "Karma Beacon" perk is only considered if self_obj is a good critter, and is completely ignored if self_obj would happen to be an evil critter. If all this is the case, then it's obviously a problem. Either the Karma Beacon consideration should also be added into the evil critter subsection, or else moved to after both the good and evil critter subsections have done their respective thing.
The second issue is probably just an illusion based on my lack of understanding, but perhaps someone could explain it to me. In the lines dealing with the Karma Beacon modifiers check, the purpose of the phrase
isn't clear to me. Wouldn't each of the lines in the Karma Beacon calculations be more concisely written as:
Code:
if ((op_global_var(37) ==1) or (karma_tmp >= 1000)) then
for the various values (karma_tmp >= 750, etc)?
The third issue (if, again, I'm reading the script properly) is that it doesn't look like the effects of the Presence perk are being calculated properly. According to the game description:
You command attention by just walking into a room. The initial reaction of another person is improved by 10% for each level of this Perk.
I can't recall ever taking the Presence perk in a game, and therefore can't really say whether multiple levels are even possible as indicated in the perk description. However even if only one level of Presence can be taken, it doesn't look to me as if the calculation used in the script:
Code:
Static_Reaction := Static_Reaction + (10 * op_has_trait(0, op_dude_obj(), 10));
could possibly be right. It looks like it adds ten
points (per level of perk) to the reaction calculation, which could be either considerably more or considerably less than ten
percent of the overall value. Wouldn't a correct evaluation of the effects of Presence be something like:
Code:
if op_has_trait(0, op_dude_obj(), 10) then
Static_Reaction := Static_Reaction + floor((Static_Reaction * ((level of perk) / 100)))
?
4) There are half a dozen spots in the script where Sulik abandons the player if the player is doing bad things, and in each of these cases he fires off a float message. In each case, though, the float message color is yellow--shouldn't the color be red, since Sulik is upset with the player in these cases?
5) In Node1100, in the subsection where Sulik abandons the party due to a bad reputation in Klamath shouldn't the dialogue line called be 1025 ("You be causing trouble in Klamath. We're gone") rather than the confusingly generic line 921 ("You got a lot of problems with people. We'll go until you be figuring that one out")?
6) This is fairly trivial, but the procedures "Check_Next_Third_Of_Areas" and "Check_Second_Third_Of_Areas" both set a background for Sulik's talking head in the Primitive Tribe area. The code in "Check_Second_Third_Of_Areas" will never be called on as the background will always be set (if appropriate) in "Check_Next_Third_Of_Areas," and since it's redundant it seems pointless to have it in there (although, if the script was compiled with a header containing these sections it's understandable why it would be present, just like all the pointless checks to update the player's marital status).
7) At the beginning of the script a local variable is declared,
Code:
variable Charisma_Roll := 0;
that doesn't seem to ever be used or referred to again. If it is supposed to refer to something in kcsulik.int (rather than something from a general-purpose header file), then there must be a problem.
8) There are about 150 unused lines of dialogue in kcsulik.msg. Although many of these are duplicates of other lines or seem to have no easily discernible referent, lines 490-492 seem to pretty clearly (or at least, pretty clearly for Grampy Bone-speak) refer to the EPA. Shouldn't a clause using these lines be inserted into Sulik's "Grampy Bone says..." responses in Node027 to take advantage of the RP's additional content?
9) There's an inconsequential error in Node027, due a small bit of confusion in Maps.h. The line:
Code:
else if ((op_cur_map_index() == 42) or (op_cur_map_index() == 43) or (op_cur_map_index() == 44) or (op_cur_map_index() == 45) or (op_cur_map_index() == 46) or (op_cur_map_index() == 43)) then
in the script obviously doesn't need the second reference to the NCR Council map.
10) Right below this in Node027 Sulik's spirit-talk comments are set for Vault 15, but his stipulated responses have nothing at all to do with anything going on at Vault 15 as far as I can recall. Although his first comment from line 530 of his .msg initially seems appropriate, on deeper consideration I don't think "those that rest" could really have much to do with the squatters. Should some other lines of his dialogue (perhaps some of the unused lines) be used here instead? Note as well that lines 530-532 of kcsulik.msg
are fairly apt descriptions of Navarro, which is dealt with in the very next line of the script (further suggesting the whole thing is a mistake/bug).
11) Could someone briefly explain to me the purpose of the small subsection:
Code:
if ((op_cur_map_index() == 19) or (op_cur_map_index() == 37) or (op_cur_map_index() == 38)) then
begin
if ((op_elevation(op_self_obj()) != op_elevation(op_dude_obj())) and (op_local_var(11) != 0)) then
op_move_to(op_self_obj(), op_tile_num(op_self_obj()), op_elevation(op_dude_obj()));
end
found in "procedure map_enter_p_proc" for every single recruitable npc? Apparently it's intended to correct a possible elevation mismatch between the npcs and the pc on the northern Modoc, "Squat A," and "Squat B" maps, but I don't understand the point of it and am wondering if there are any situations where it ever does anything.
**************************************************
Unrelated to Sulik, there's a very old outstanding bug in all versions of FO2 (
cite) where Billy in the Den stops hiring a female pc for sex after the first few transactions. In looking at Billy's script and his behavior in the game, I believe this is because his destination tile (13742 on the east Den map) after leaving the bar to go home for the night is either set incorrectly (it's off the playable portion of the map) or set so that the exit grid is somehow interfering with his path; he therefore gets "stuck" trying to reach an unreachable destination, and never resets to proceed back inside the bar. I've set his script to use a new destination tile inside the playable portion of the map, but I haven't had an opportunity to try my revised script over time in a real game. Does anyone have an opinion of whether or not I'm on the right track with that solution? If so, that's an additional issue that could be fixed by the RP.