Bugs found in the lastest patch
Hey killap,
I've played a bit through your latest patch, and found some errors. I've tried to organize the buglist by region. Because this is such a
LONG list, and because I know you planned an August update, I've tried to isolate the problems and recommend a technical solution the best that I can for each of these bugs.
-- The Haen.
Klamath
1. The "intersting" in line 392 of kcBob.msg should be "interesting".
2. Line 947 in kcSulik.msg should end with a question mark. On scanning through the rest of the file, I noticed that line 3050 is also missing a terminating question mark.
3. You can walk over the lootable crate in the west side Klamath Mall Map -- read on for more instances of this.
4. You can walk over a bowl (with pestle) in one of the the houses in Downtown Klamath. This house is the one closest to the exit grid to the Klamath Trapping Grounds -- again, read on for more instances of this.
5. You can walk over the lootable skeletons found in the Klamath Mall and in the Lair of the Rat God, most likely because the scenary pieces over them can normally be walked over. (The lootable skeleton on the first floor of the rat caves is properly set with a blocking hex).
The Den
1. Line 101 in zsDrvCar.msg currently reads: "Currently, this car doesn't appear to be functional, it needs a fuel cell controller." It should be: "Currently, this car doesn't appear to be functional. It needs a fuel cell controller."
2. Line 210 in zsDrvCar.msg currently reads: "You fail to repair the car. You fail to repair the car with the fuel cell controller." It should be: "You fail to repair the car with the fuel cell controller."
Modoc
1. The "Well,," in line 236 of mcGrisha.msg should be "Well,".
2. You can walk over the lootable crates in the Modoc slaughterhouse and Jo's General Shop.
3. You can walk over the bowl (with pestle) in Farrell's house.
Gecko
1. If you kill a ghoul with critical head insta-kill, you get the line: "This blow buries this ghoul". Try the more idiomatically correct "The blow buries this ghoul" or "This blow buries the ghoul" (combat.msg, line 5401).
On a similar note, many critical hit messages yield idiomatic and/or grammatical errors. Read on for a full list.
2. When you talk to the front desk guard in the Gecko Reactor, there are some dialogue errors if the player asks for directions to the reactor pit. There are two lines in gcRDesk.msg that need to be changed in order to fix this:
-> line 150: "past the control room" should read "past the robot control room" to maintain consistency with rest of dialog
-> line 151: "Where’s the reactor control room?" should read "Where’s the robot control room?"
3. If you save your game in the Gecko junkyard, then there is a chance that Lumpy will teleport on reload. This is caused by a bug in the map_enter_p_proc procedure, which is triggered automatically when the game is loading. Therefore, adding a "is_loading_game" check to procedure map_enter_p_proc in gcLumpy.ssl should solve the problem, as thus:
Code:
procedure map_enter_p_proc begin
if (not (is_loading_game)) then begin
Only_Once:=0;
critter_add_trait(self_obj,TRAIT_OBJECT,OBJECT_TEAM_NUM,TEAM_GECKO);
critter_add_trait(self_obj,TRAIT_OBJECT,OBJECT_AI_PACKET,AI_TOUGH_CITIZEN);
if ( (game_time_hour <= 600) or (game_time_hour >= 1800) ) then begin
move_to(self_obj,22285,self_elevation);
end
else if (random(1,2) == 1) then begin
move_to(self_obj,24685,self_elevation);
end
else begin
move_to(self_obj,19912,self_elevation);
end
end
end
The procedure can be re-written to be more efficient (for example, the critter_add_trait commands should only need to be run once), but it will prevent Lumpy from jumping from place to place for each game load.
4. Wandering ghouls on the main Settlement map can wander through the reactor doors into the area beyond it, making them inaccessible to the player. A few stratgically places blocking hexes should fix this.
Redding
1. Madam Modjeska repeats "Hello there. What can I help you with?" (line 129 in rcModjes.msg) everytime you return to root dialog node (Node007), making it seem like she's greeting you anew each time.
However, this is the same line that is displayed if the player talks to her any time after the first time (i.e. the herebefore flag is set) but before Doc Johnson successfully administers the Jet Antidote -- the "Hello there" makes sense only the context of an initial greeting.
There are several ways to fix this, but I think the simplest way is to remove the "Hello there" part of line 129. This way, it'll make sense whenever the player returns to Node007, and it'll still make sense as an initial greeting line to the player.
2. The "what" in line 174 of rcLou.msg should be "who".
3. There are a total of four kids in downtown Redding. If you engage them in combat, the game will tell you that you hit a "Townsperson" for three of them - a rather misleading name. For the last kid, Melchior Jr., the game will refer to him as a "Kid".
Fixing the problem for Melchior Jr. is easy enough: Changing entry 994 in scrname.msg from "Kid" to "Melchior Jr." will do it. However, the problem is a bit more complicated for the other three children:
They all use the script RCGenPes.ssl, which is shared by both adult males and females throughout all of Redding. Changing the corresponding entry in scrname.msg (791) will result in the adults being called "Kid" or "Child" (or whatever) as well.
The best way to resolve this is to give the other three Redding children a new and separate script (say, rcKid.ssl), and update the script.lst and scrname.msg files accordingly. It is not difficult to extract the code related to children from RCGenPes.ssl, as it is a relatively simple script, but see the next entry for a bug you should be aware of.
4. If you try to bring up a detailed description of critters that use the RCGenPes.ssl script, you may sometimes get "Error" as the description. Also, when you try to talk to them, nothing will happen (they are supposed to give out float messages). These two are outward symptoms of the same problem.
RCGenPes.ssl assigns detailed descriptions and float message options to a target critter only after procedure look_at_p_proc has been first run - a necessity since the script is applied to many different types of townspeople in Redding. Look_at_p_proc does this by defining two local variables that both description_p_proc and talk_p_proc uses without checking. Since look_at_p_proc is normally triggered on a mouseover, this is usually not a problem. However, the developers forgot that it is possible to mouseover a critter without the look_at_p_proc procedure being triggered. The easiest way to do this is to go in combat mode, activate the targeting cursor, move it over a critter that hasn't been moused over before, then exit targeting mode by either right-clicking or ending combat using keyboard shortcuts. If you now try to talk or bring up a detailed look, you will experience the symptoms described.
There are probably more efficient ways to do this, but the following three steps will fix the bug:
a) Place the code for assigning detailed description lookup and float message options out of look_at_p_proc and into a macro, say, "assign_personality". This should be everything but the last line of look_at_p_proc. Replace the code in look_at_p_proc with the name of the macro.
b) Add a call to the macro at the beginning of talk_p_proc, as thus:
Code:
procedure talk_p_proc begin
assign_personality
c) Replace description_p_proc with the following:
Code:
procedure description_p_proc begin
script_overrides;
assign_personality
display_msg(mstr(local_var(LVAR_Look_At)));
end
New Reno
1. You can walk over an ice box on 2nd floor of Desparado casino. The ice box in question is located in a closet of the room north of the staircase.
2. You can walk over the bowl (with pestle) in the Masticator's cage.
3. If you use a Lockpick to pick the locked doors in the Desparado basement or the second floor of Bishop's casino, you get a message saying "That does nothing." regardless of whether or not you succeed in your lockpicking attempt. The reason for this is that the script governing the behaviour of these doors, niBasDor.ssl, was not re-compiled with the changes in the updated ziMtlDor.ssl file. As a result of the lack of script_overrides, the "That does nothing." message appears. Recompiling niBasDor.ssl with the updated ziMtlDor.ssl should fix this bug.
4. If you ask Majorie Reed "Why? The Jet seems addictive enough already." (Node013 in ncResear.ssl) then you'll get an option to ask her "What's the deal with Redding?" for two consecutive dialogue nodes -- each giving you a different reply -- see nodes Node014 and Node015 for the details.
Looking at the actual content of the dialogue, the first "What's the deal with Redding?" (line 366) should probably be "Why the tight schedule?" (line 357) instead. This can be done by changing Node015 to the following:
Code:
procedure Node015 begin
Reply(375);
NOption(357, Node014, 004);
NOption(377, Node999, 004);
end
5. Before Myron joins your party, when you ask him about the Mordino family he will say "They're my patrons. They're all right...I guess." (Line 1715) One of the possible responses is "Well what? Aren't they treating you all right?" (Line 1716 - See Node246 for details) The "Well what" part does not make sense -- I'm guessing the developers copied and pasted from the next dialoge node (Line 1486 in Node225 -- "Well what? Are they treating you all right?") and forgot to remove the "Well what". Line 1716 should simply be "Aren't they treating you all right?" or "'I guess?' Aren't they treating you all right?"
6. The "were" in line 696 of ncMason.msg should be "we're".
7. If you decide give 500 coins to McGee, you only really give 473 coins. This is because in ncMcGee.ssl, both procedure Node012 and the macro payoff_mcgee check for the value 473, and Node015 (which calls the macro payoff_mcgee) only has the player paying out 473.
In order to fix this, all references to "473" in both Node012 and Node015 needs to be changed to "500".
Optionally, macro payoff_mcgee can also be fixed to check for 500 instead of 473, but technically speaking this isn't needed to fix the bug.
8. If the player pisses McGee off to the point where he attacks the player, then the ending line 318 ("Let me show you...") is displayed. However, this only makes sense if you had stolen the hunting rifle from McGee prior to speaking with him. This can be fixed by creating a new line 319 "Uh oh..." (or something similar), and defining a macro similar to reply_w_rifle_check to display the correct line depending on the situation. For example, if we define the macro like the one given:
Code:
#define Option_w_rifle_check(x,y) NOption(x+(obj_is_carrying_obj_pid(self_obj, PID_HUNTING_RIFLE), Node998, y);
Then we can change all instances of:
Code:
NOption(318, Node998, 001);
to:
Code:
Option_w_rifle_check(318, 001)
Though the "001" should really be "004" -- see my next point.
9. Dumb charcters make a rather intelligent reply of "All right then..." (line 428) to McGee when the old man tells them to get lost after they try to ask for permission to "play machine" (See Node020). Similarly, if McGee is provoked through dialogue to attack a dumb character, they respond with the rather intelligent sounding "Let me show you..." (Line 318), which even standing by itself is already suspect due to the bug just described in 6. A more suitable response is merited -- probably a few new lines need to be created for dumb characters.
10. While selecting a made man name or a boxing name, male characters can chose an obviously female alias, and vice versa. The reason for this is because the macros setup_set_made_man_name and setup_set_prizefighter_name simply do not take the player's gender into account (unlike setup_set_porn_star_name, which does take it into account).
However, in the list of names found in newr1.msg, female made man names are thoroughly mixed with male made man names and gender neutral made man names. A similar situation exists for the list of prizefighter names. Therefore, in order to fix this bug, a re-arrangement of the list of names and a change to the macros to take gender into account may be necessary.
11. Depending on the specific boxing name selected by the player, Stuart Little was supposed make some special comments -- all of them are references to Rocky, except for one single reference to Tyson. See Node031 in ncStulit.ssl for details.
Unfortunately, it appears that the order of the boxing names was changed after Node031 was scripted, so picking the special names no longer has the same effect, while picking some other innocent-looking name unexpectedly brings out the special comments. Since the order of names will probably change again if bug #10 is fixed, I'll simply list each special comment line found in ncStulit.msg and match it with the appropriate name and line found in newr1.msg. Once the final order of names is determined, Node031 in ncStulit.msg can be updated to match the names to the lines.
-> Line 500 - (The midget frowns.) Didn't he die against that Russian guy way back when? Aw, whatever. Shall we hit the ring? <-- Apollo (Creed) (Line 434 in newr1.msg)
-> Line 501 - (The midget smirks.) Looks like you and the "Masticator" will be getting along just fine. Just don't bite off too many ears. Well…shall we hit the ring? <-- (Mike) Tyson (Line 437 in newr1.msg)
-> Line 502 - (The midget smirks.) You don't look Russian. But whatever works for you…shall we hit the ring? <-- (Ivan) Drago (Line 439 in newr1.msg)
-> Line 503 - (The midget smirks.) "Pity the fo," huh? Well, okay…but let's hope YOUR career goes somewhere. Shall we head to the ring? <-- Clubber Lang (Line 440 in newr1.msg)
-> Line 504 - (The midget smirks.) Eye of the Tiger, huh? "Aaaydrian," "Aaaaydrian…" Heh-heh. I like it…lot of weight associated with it. Shall we head to the ring? <-- (Rocky) Balboa (Line 448 in newr1.msg)
12. The "Lightning " in line 430 of newr1.msg should be "Lightning" -- note the extra space the end. Of course, if fixing bug #10, then this line will probably need to be moved to somewhere else. Note that the corrections.txt claims to have fixed this...perhaps there has been a regression of some sort?
13. The "Masticators'" in line 1700 of newr1.msg should be "Masticator's" (misplaced apostrophe)
14. Currently in boxing, if either the player or the boxer gets a critical failure and misses a turn as a result, then the fight is called on a due to a KO (oops). The reason this is happening is because the check for both the player and the boxer's status is looking only for CRITTER_IS_DEAD and CRITTER_IS_PRONE.
Instead, the check should be done for critter_state(self_obj or dude_obj) bwand DAM_LOSE_TURN and setting a flag as appropriate. This should allow the player or the boxer to properly miss a turn due to a critical failure without losing the fight outright. See define.h for a complete list of damage types.
15. You if successfully trick T-Ray into thinking you are one of Bishop's lieutenants, your town reputation in Reno will increase (there's another bug that may prevent this from happening at all -- see the next entry for more details). However, judging by the name of the define (REP_NEW_RENO_NON_VIOLENT_CAR_RECOVER), this increase is suppose to only occur if you get the car back non-violently, and not for tricking T-Ray.
To correct this, the macro set_gave_car_exp in ncTRay.ssl needs to be changed to give the town reputation increase at the right place, as thus:
Code:
#define set_gave_car_exp if (gave_car_exp == false) then begin
\
display_mstr(1000);
\
inc_reno_rep(REP_NEW_RENO_NON_VIOLENT_CAR_RECOVER);
\
give_xp(EXP_NEW_RENO_RECOVER_CAR);
\
if (((46 <= prev_node) and (prev_node <= 53)) and (dude_family != family_bishop)) then begin \
display_mstr(1001);
\
give_xp(EXP_NEW_RENO_RECOVER_CAR_BISHOP_BONUS);
\
end
\
end
\
set_lvar_bit_on(LVAR_Flags, gave_car_exp_bit)
16. You do not get the experience for getting your car back non-violently from T-Ray until you talk to him again. Moreover, if you managed to fool T-Ray into thinking you are one of Bishop's lieutenants, you may not necessarily get the experience reward for doing so. Also, if you kill off some of the chop shop boys, but not T-Ray, and then return and manage to get into a conversation with T-Ray without entering combat (i.e. sneak), you can gain experience for recovering the car "without using violence"! Note that this last bug can also be reproduced with the orginal v1.02D patch.
All of these bugs are symptoms of the same problem: In ncTray.ssl, the macro that rewards the necessary experience, set_gave_car_exp, is being called ONLY at the start of talk_p_proc -- I assume this was one of Seraph's changes, since the original version from v1.02D has the macro call both near the start and near the end of talk_p_proc. The reason for this seems to be the original developers' questionable decision to give the non-violent experience bonus for both recovering the car and driving away with it.
The macro call near the end of talk_p_proc would capture any peaceful attempts at recovering the car, as well as any Bishop related-trickery if employed, while the macro call near the beginning would capture the drive-away case. With the macro call near the end of talk_p_proc removed, it created the state of things as described above.
Therefore, three things need to be done to fix this bug:
a) In ncTRay.ssl, restore the macro call to set_gave_car_exp near the end of talk_p_proc, and remove the earlier call to prevent rewarding the player double the experience deserved.
b) Change the conditional check for calling set_gave_car_exp to stolen_car_recovered only (i.e. don't check for driving away in ncTRay.ssl)
After implementing a) and b), procedure talk_p_proc would look something like this:
Code:
procedure talk_p_proc begin
hold_on := false;
if (t_ray_max_fucked) then begin
call Node999;
end else begin
move_obj_inven_to_obj(self_obj, new_reno_t_ray_box);
move_obj_inven_to_obj(new_reno_t_ray_box, self_obj);
if ((Fallout2_enclave_destroyed) and (get_stolen_car(stolen_car_recovered))) then begin
start_dialog_at_node(Node033);
end else begin
start_dialog_at_node(Node006);
end
move_obj_inven_to_obj(self_obj, new_reno_t_ray_box);
move_obj_inven_to_obj(new_reno_t_ray_box, self_obj);
if (get_stolen_car(stolen_car_recovered)) then begin
set_gave_car_exp;
end
set_herebefore;
nr_add_timer_event_rand(self_obj, 25, 35, float_param);
gdialog_set_barter_mod(0);
end
end
c) In script zsDrvCar.ssl, award the experience for driving away right after setting the flag. So, the relevant part in procedure use_p_proc would look something like this:
Code:
if (get_stolen_car(stolen_car_stolen)) then begin
set_stolen_car(stolen_car_drive_away);
display_msg(message_str(SCRIPT_NCTRAY, 1001));
give_xp(EXP_NEW_RENO_RECOVER_CAR);
inc_reno_rep(REP_NEW_RENO_NON_VIOLENT_CAR_RECOVER);
end
17. T-Ray always acts as if you have never met him before when you talk to him, instead of the more appropriate "You again?" comment after your initial meeting. The reason for this bug is because the know_t_ray flag in ncTRay.ssl is being set in the wrong spot. To fix this, move set_know_t_ray to the proper place in procedure Node006, as thus:
Code:
procedure Node006 begin
if (know_t_ray == false) then begin
set_know_t_ray;
Reply(275 + ((dude_is_female) and ((dude_is_pornstar) or (dude_charisma > 6))));
end else begin
Reply(277 + banged_t_ray);
end
18. And yet another T-Ray bug/bad implementation report! The various container objects around T-Ray are being watched by him, and T-Ray will warn the player if he catches them trying to attempt anything on the sly. However, T-Ray uses the generic "Stay away from there." comment instead of the specialized lines found in his message file (Lines 940 to 951 in ncTRay.msg). The is not too surprising, considering that there is no code under timed_event_p_proc in T-Ray's script that has to do with watching the locker, and the watch script niTRyLk.ssl does not set up any timer events either.
To fix this, several things needs to be done to both ncTRay.ssl and niTRyLk.ssl.
a) In niTRyLk.ssl, remove the line "#define DO_CHECK_TAMPER_CONDITION (dude_is_made_man == false)" -- you want the script to "catch" the player all the time so that proper processing can occur.
b) In niTRyLk.ssl, add a define for the macro "genereral_caught_action" to override the default behaviour found in ziLocker.ssl -- yes, the developers apparently took spelling lessons with Bubbles the Chimpanzee. All this macro needs to do is to set up a timer event, which should look something like this:
Code:
#define genereral_caught_action if (caught_tamper) then begin
\
if (Fallout2_enclave_destroyed) then begin
\
flush_add_timer_event(new_t_ray_obj, 0,
tamper_good_CSObj_param); \
end else if (dude_made_man == false) then begin
\
script_overrides;
\
flush_add_timer_event(new_t_ray_obj, 0,
tamper_CSObj_param); \
end
\
end
, assuming that you have defined a new "tamper_CSObj_param" and "tamper_good_CSObj_param" in NewReno.h.
Of course, you can always "borrow" another param from the list found there, since T-Ray doesn't use most of them anyway.
c) In ncTRay.ssl, process the timed event. The processing for this should come right after the "combat_is_initialized == false" line. Call Node056 on tamper_good_CSObj_param, or Node057 on tamper_CSObj_param, or attack the player if Node057 has already been called once.
19. One of the stuff on the tables in the Chop Shop cannot be accessed. If we consider T-Ray's office to be in the north west corner of the Chop Shop, then the stuff in question is the one located closest to the north east corner. According to the Mapper, there is a rope that the player can loot, assuming that the player can escape the scrutiny of the nearby chop shop boyz, of course.
Broken Hills
1. If you tell Liz that she's a "crabby one" (Node008, Line 129), then she responds with "Hi. I'm Liz. What do you want?" (Node001, Line 103) instead of the more appropriate "Now what?" (Line 104). The reason is because Node001 checks to see if the player has been here before and has the WTG variable set, or came from Node007 in order to display line 104. This is needlessly complicated.
To fix this bug, remove all references to From_WTG and From_7 variables, set LVAR_Herebefore to 1 right after the displaying line 103 instead of , and make the condition for displaying Line 104 to simply check for LVAR_Herebefore equal to 1. So Node001 would look something like this:
Code:
procedure Node001 begin
if( local_var(LVAR_Herebefore) == 1 ) then begin
// Only display this Reply if we have already met Liz.
Reply(104);
end
else begin
set_local_var( LVAR_Herebefore, 1 );
Reply(103);
end
if( dude_iq == 1 ) then
NOption(105, Node002, 001);
if( ( dude_iq == 2 ) or ( dude_iq == 3 ) ) then
NOption(106,Node003,002);
NOption(107,Node007,004);
NOption(108,Node008,004);
if ( check_general_rep <= -250) then
NOption(109,Node009,004);
if ( ( map_var(MVAR_Know_Liz_Guns) == 1 ) and ( map_var( MVAR_Basement_Permission ) == 0 ) ) then
NOption(110,Node010,004);
//if (global_var(GVAR_BH_JAIL) == JAIL_ENLISTED) then
// NOption(111,Node010,004);
NOption(112,Node999,004);
end
2. If you ask Liz for permission to access her basement, but do not agree to end the "mutants' domination", then Liz will claim that she got rid of her weapons -- a not-too-subtle hint to stay away from her arsenal. If you then persist in trying to enter the basement without sneaking or killing her, you won't be able to enter, but Liz does not warn you off either.
The reason this bug occurs is because procedure critter_p_proc triggers Liz's warning-the-player routine if MVAR_Basement_Permission is 0. But if you do not agree to end the "mutants' domination", MVAR_Basement_Permission is set to 2 instead, so Liz's warning-the-player routine does not get triggered. Additionally, since another script (hiManhol.ssl) only permits entry to the basement if MVAR_Basement_Permission is 1, the player gets into the situation where he isn't warned, but he isn't moved to the basement either.
The simplest fix here is to change critter_p_proc to check for MVAR_Basement_Permission == 2 in addition to 0, as thus:
Code:
if( map_var(MVAR_Player_Tried_Basement) == 1 ) then begin
set_map_var( MVAR_Player_Tried_Basement, 0 );
if( (map_var( MVAR_Basement_Permission ) == 0) or (map_var( MVAR_Basement_Permission ) == 2) )then begin
if( local_var(LVAR_Basement_Warning) == 0 ) then begin
set_local_var(LVAR_Basement_Warning, 1);
floater(179);
end
else if( local_var(LVAR_Basement_Warning) == 1 ) then begin
set_local_var(LVAR_Basement_Warning, 2);
floater(180);
end
else begin
floater(181);
call Node998;
end
end
end
3. If you free Franc and Manson from the jail, accept the quest from Jacob to blow up the mine, then return to Jacob and change your mind, then try to talk to Franc, you can get very weird dialog. Basically, the dialogue box will open up, and the last dialog you saw from
ANY critter will be displayed, with "Go on" as your only possible reply. Clicking on "Go on" exits the dialog, while clicking on the REVIEW button shows absolutely nothing. This is a rather serious bug, since Franc can potentially display dialogue belonging to any other critter out there, which may mean it's reading into old memory that it's not supposed to access (i.e. potential memory leak, though hopefully it's just an old variable they haven't re-initialized).
The cause of this bug seems to be found in procedure talk_p_proc in hcFrank.ssl. You have the following snippet of code in talk_p_proc:
Code:
else if (global_var(GVAR_BH_CONSPIRACY) == CONSPIRACY_REJECTED) then begin
start_gdialog(NAME,self_obj,4,-1,-1);
gSay_Start;
call Node011;
gSay_End;
end_dialogue;
end
But Node011 is simply a floater (i.e. no true dialog):
Code:
procedure Node011 begin
//Reply(137);
//NOption(132,Node999,004);
floater(137);
end
Apparently, the engine doesn't quite like this.
The fix is to simply call Node011 in talk_p_proc without invoking start_gdialog and its associated commands.
4. If the player leaves conversation with Dan immediately after it was started, then the next time the player talks to Dan, he'll ask the player whether or not he found his wife, despite the fact that the subject of the missing wife was never brought up. The problem is due to an erroneous conditional in procedure talk_p_proc:
Code:
else if( ( local_var( LVAR_Herebefore ) == 1 ) or
( local_var( LVAR_Spouse_Status ) == SPOUSE_TOLD ) ) then begin
The OR conditional should be an AND conditional, which is probably the original intent of the developers. However, I think a better way to fix the bug is to make Dan ramble on anyway -- on a more technical level, make all NOptions in Node001 point to Node003. This is more in keeping with Dan's character -- he's so distracted that he ignores the player and rambles onward even if threatened with robbery, so why should he pay anymore attention if the player tries to say bye?
5. Dan does not give the promised $500 if the player initially rejects his offer but then reconsiders the decision (pick the grammatically awkward "Fine. Fine, just stop pestering me." line). What happens instead is that the conversation ends, and if the player tries to restart the conversation, Dan starts asking the player if his wife has been located. To fix this, Node007 should point to Node008 if the player changes his or her mind instead of simply ending the dialog, as thus:
Code:
procedure Node007 begin
Reply(123);
NOption(124, Node009, 004);
NOption(125, Node008, 004);
end
6. As alluded to in bug #5, there are several minor text errors in hcDan.msg. I'll enumerate them one by one:
-> Line 116: Extra space between "ask," and "you"
-> Line 125: This should read "Fine! Fine! Just stop pestering me."
-> Lines 126, 129, and 144: Trailing whitespace at the end of the line.
7. After you persuade Dan to leave Broken Hills, he remains there forever, even though his float message suggests that he's getting out ASAP. This is because the code to remove him simply does not exist. Given how consistent the developers were in removing other critters who decide to move out, I'm inclined to think this is an oversight on their part and therefore a bug.
8. One of the entrances to the ant tunnels is through a manhole in the outhouse. The player can open the manhole and descend into the tunnels. However, the player can click and "use" the out edge of the manhole, and this will allow the player to go down without first removing the cover! Unfortunately, this seems to be an engine bug, so I'm not sure if much can be done about it.
Raiders
1. You can walk over the lootable skeleton found in the Raider caves, and you can walk over one out of the two lootable skeletons found in the Scorpion pits.
Random Encounters/Miscellaneous
1. As previously mentioned, a few of the critical comment messages are idiomatically and/or grammatically awkward -- mostly due lack/improper use of conjunctions and comma splices. I've quickly gone through combat.msg and highlighted the problematic lines.
-> Line 5000, 5100: "and really hurts" should be ". That really hurts"
-> Line 5007, 5107: ", death is instantaneous" should be ". Death is instantaneous"
-> Line 5017: " blowing through the armor" should be ", blowing through the armor"
-> Line 5020: " knocking the air out, he slumps to the ground out of the fight" should be ", knocking the air out. He slumps to the ground out of the fight"
-> Line 5022: " putting a major hurt on his leg" should be ", putting a major hurt on his leg"
-> Line 5027, 5127: " inflicting some extra pain" should be ", inflicting some extra pain"
-> Line 5028: " causing blindness, unluckily for him" should be ". Unluckily for him, it causes blindness"
-> Line 5029, 5129: ", and with no protection there, causing serious pain" should be ". With no protection there, it causes serious pain"
-> Line 5032: ", sadly, he is too busy feeling the rush of air on the brain to notice death approaching" should be ". Sadly, he is too busy feeling the rush of air on the brain to notice death approaching"
-> Line 5035: " and without protection, he falls over, groaning in agony" should be ". Without protection, he falls over, groaning in agony"
-> Line 5117: " piercing through her defenses" should be ", piercing through her defenses"
-> Line 5120: " knocking the air out, she slumps to the ground" should be ", knocking the air out. She slumps to the ground"
-> Line 5122: " putting a major hurt on her leg" should be ", putting a major hurt on her leg"
-> Line 5128: " causing blindness. She grimaces" should be ", causing blindness. She grimaces"
-> Line 5132: ", sadly, she doesn't get to pray to her gods before she meets them" should be ". Sadly, she doesn't get to pray to her gods before she meets them"
-> Line 5223: " causing blindness. The young child drops to the ground" should be ", causing blindness. The young child drops to the ground"
-> Line 5401: ". This blow buries this ghoul" should be ". This blow buries the ghoul"
-> Line 5501: ", the large mutant bovine stumbles for a moment" should be ". The large mutant bovine stumbles for a moment"
-> Line 5600: ", sending the Radscorpion flying on it's back" should be ", sending the Radscorpion flying on its back"
-> Line 5603: ", putting a major hurt on it's claws" should be ", putting a major hurt on it's claws"
-> Line 5608: ", sending the 'scorpion flying and crippling some of it's legs" should be ", sending the 'scorpion flying and crippling some of its legs"
-> Line 5800: ", the floater falls to the ground" should be ". The floater falls to the ground"
-> Line 5801: ", the floater falls to the ground, seemingly lifeless" should be ". The floater falls to the ground, seemingly lifeless"
-> Line 5802: ", with serious consequences to the creatures continued existence" should be ", with serious consequences to the creature's continued existence"
-> Line 5806: ", the blow causing some sort of violent reaction in the creature" should be ". The blow causing some sort of violent reaction in the creature"
-> Line 5808: " then it jerks wildly and quivers like a pudding surprise" should be ". It jerks wildly and quivers like a pudding surprise"
-> Line 5900: ", pushed like a bad habit, the centaur falls over and is stunned" should be ". Pushed like a bad habit, the centaur falls over and is stunned"
-> Line 5902: ", causing a massive neurological failure" should be ", causing massive neurological failure"
-> Line 5905: " striking a critical spot, and crippling the arm" should be ", striking a critical spot. The arm is crippled"
-> Line 6001: ", sparks fly and the robot goes momentarily out of control" should be ". Sparks fly and the robot goes momentarily out of control"
-> Line 6103: ", the animal coughs up a spurt of blood" should be ". The animal coughs up a spurt of blood"
-> Line 6201: ", which collapses" should be ". It collapses"
-> Line 6202: ". The manti ponders whether to continue living" should be ". The manti ponders whether or not to continue living"
-> Line 6204: ", causing the Manti to lick it's wounds. It holds the limb oddly" should be ", causing the manti to lick its wounds. It holds the limb oddly"
-> Line 6207: ", which causes the manti to fall over. A limb is bent at an odd shape" should be ", which causes the manti to fall over. A limb is bent at an odd angle"
-> Line 6405: ". almost tipping it over" should be ", almost tipping it over"
-> Line 6504: ", the shock makes your vision go dark. After a moment, you notice that your vision has not returned" should be ". The shock makes your vision go dark. After a moment, you notice that your vision has not returned"
-> Line 6519: ". Unlucky for you, it also causes immediate vision loss" should be ". Unluckily for you, it also causes immediate vision loss"
-> Line 6526: ". There are not enough words in the universe to describe the pain your are feeling at this moment" should be ". There are not enough words in the universe to describe the pain you are feeling at this moment"
-> Line 7105: ", causing him to pause and shake of your massive attack" should be ", causing him to pause and shake off your massive attack"
2. The player can walk over quite a few pots, bowls, and other things in many random maps. I've gone through each of them and tried to locate places where the player can go where one isn't supposed to go.
-> coast7.map, coast9.map, coast10.map, coast11.map, coast12.map: You can walk over almost all pots and bowls located on these maps.
-> coast8.map: You can walk over all bowls located on this map.
-> coast12.map: You can walk over the shelf located on this map.
-> desert6.map: The inner divider wall of the house has a hole in it. (The mapper actually shows two more holes, though I think they are inaccessible to the player. That being said, they should probably be patched anyway just in case.)
-> desrt12.map: The lettuce inside the house
CANNOT be walked over. While this makes sense to me personally, all the other lettuce in the game allows the player to walk over them, so I see this as a bug.
-> dnslvrun.map: You can walk over one bowl in the east end of the map.
-> mountn4.map, mountn6.map: You can walk over the lootable crates located on these maps.
-> rndbhead.map: You can walk over the edges of the stone bench located close to the head.
3. I'm not sure if anything can be done about this, as it seems like the engine handles this part. Anyway, if a critter is wielding a weapon and has crippled limbs, and a player with the Awareness perk looks at it, you get a pretty weird message. For example, if Sulik is armed and crippled, and you examine him in detail, you may get a message like this: "He has 47/134 hps and is wielding a Wakizashi Blade.and has crippled limbs." Basically, lines 530 or 531 in proto.msg is being appended directly to the end of lines 546 or 547 in proto.msg. The ideal fix is to modify 546 and 547 not to end in a period, and to append line 545 if there is no crippled limbs, else append lines 544 and then 530 or 531 otherwise. But like I said before, I'm not sure if we can fix this through the script.
4. Sulik never seems to be able to level up to his sixth stage (PID = 16777531). At first, I thought that no other party members can reach their final form, but Cassidy can do so no problem. I've not played enough yet to see whether other party members with a sixth stage (Vic, Goris, Dogmeat) ever reach theirs, but I suspect not. This is probably an engine bug -- any chance that Timeslip can fix this?